Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)

当使用Objective-C的时候,你总会遇到Foundation 框架中的一些类,这些类包括NSString,NSNumber,NSArray和NSDictionary,这些数据结构都是自解释的。

Objective-C以简明详细的语法而著名,自从oc1.0有一个简单的方式定义一个NSString变量,我们可以这样声明一个字符串变量

NSString *[email protected]“Hello Lves";

没有这种语法之前,我们创建一个字符串变量需要先alloc然后init。Literal(简明)语法已经在oc2.0之后扩展到了NSNumber,NSArray和NSDictionary.使用简明语法可以减少代码量和更加容易阅读。

Literal Number

NSNumber变量可以封装一些基本类型变量,像:int,float,bool等,在未使用literal之前,也许你会这样定义

NSNumber *someNumber=[NSNumber numberWithInt:1];

整数1被放进NSNumber中,当然有比这更好的方法,实例:

 NSNumber *[email protected];
    NSNumber *[email protected];
    NSNumber *[email protected];
    NSNumber *[email protected];
    NSNumber *[email protected]‘a‘;

简明语法也可以这样表述:

    int x=5;
    float y=6.32f;
    NSNumber *[email protected](x*y);

像上边那样定义而不是采用之前的语法因此使用简明语法定义NSNumber变量是十分有用的。

Literal Arrays

数组是经常使用的类型,在2.0之前我们可以这样定义一个数组:

NSArray *animals=[NSArray arrayWithObjects:@“cat”,@“dog”,nil];

然而使用Literal语法之后,你只需要这样做:

NSArray *[email protected][@“cat”,@“dog"];

对于数组还不止这些,平时操作数组获得一个指定下标下的内容我们可以使用objectAtIndex方法:

NSString *dog=[animals objectAtIndex:1];

使用letaral,你可以这样做:

NSString *dog=animals[1];

使用简明语法的时候有一点需要注意:如果数组中有一个对象是空,它会报异常,因为literal语法实在栈上动态的创建和添加对象的,你得到的异常如下:

下面看下面一个例子:

    id [email protected]"wildcat";
    id [email protected]"Lves Li";
    id [email protected]"lele";

    NSArray *arrayA=[NSArray arrayWithObjects:obj1,obj2,obj3, nil];
    NSArray *[email protected][obj1,obj2,obj3];

假如obj2=nil;此时使用简明语法定义的数组arrayB就会报异常,而arrayA不会,但是arrayA中只有一个变量obj1。因为arrayWithObjects: 方法直到遇到nil就不添加变量了而不会报异常。

这点不同说明了使用literal更加的安全。抛出异常使应用崩溃比创建一个包含比期望变量少的数组要好,报出异常意味着我们可以更容易发现问题进而解决。

Literal Dictionary

未完待续:转载请注明原文转自:http://blog.csdn.net/wildcatlele

Effective Objective-C 2.0 笔记三(Literal Syntax简写语法),布布扣,bubuko.com

时间: 2024-12-26 02:01:39

Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)的相关文章

[好程序员训练营]Objective-C学习笔记---点语法

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>------我的OC语言笔记,期待与您交流! 在java等面向对象的语言中,常常会用到obj.方法,或者用到obj.属性来调用对象的方法和属性.OC为了使使用其他语言的程序设计者更好学习OC,所以OC也引入了点语法,但是从根本上讲,OC的点语法和java等语言的点语法还是有一定区别的,下面我们就来看看怎么使用OC的

【Bootstrap3.0建站笔记三】AspNetPager分页,每一列都可排序

1.AspNetPager分页,实现每一列都可排序: (1).需要将默认排序字段放在HTML页面中. (2).排序字段放置为td节点的属性. 如图: 实现的效果图如: HTML代码: <div class="row"> <div class="col-lg-12 col-sm-12 col-xs-12 col-xxs-12"> <table class="table table-striped table-hover tabl

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

lucene学习笔记(三)

好几天没更新了.更新一下,方便自己和大家学习. 这是最基本的代码 package index; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document;

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r