你的位置:首页 > 操作系统

[操作系统]第三条、多用字面量语法,少用与之等价的方法


首先,当我们创建NSString对象时,Objective-C提供了非常简单的方式去创建NSString。这就是字符串字面量。语法如下:

NSString *s = @"This is a test";

如果不这样的话,那么我们需要alloc、init然后去创建了。

-------------------------------------------------------------------------------------------------------------------------------------------

还有NSNumber,用于存储整数浮点数,原来我们可能用:

NSNumber *number = [NSNumber numberWithInt:1];

现在我们可以直接:

NSNumber *number = @1;

-------------------------------------------------------------------------------------------------------------------------------------------

NSArray,我们创建数组也许会这样:

NSArray *arr = [NSArray arrayWithObjects:@"112",@"2323",@"str",nil];

当我们使用字面量数组时:

NSArray *animals = @[@"cat",@"dog",@"pig"];

而且取数据也比较简单,原来我们取数据是:

NSString *s = [arr objectAtIndex:1];

当我们使用了字面量数组后,我们只需要:

NSString *s = animals[1];

取变得更加方便。但是需要注意:如果元素为nil,则会抛出异常

其实他的效果就等同于先创建一个数组,然后将中括号里面的元素再添加进去。

其实字面变量只是一种语法糖(也成糖衣语法:是指计算机语言中与另外一套语法等效但是使用起来更加方便的语法),下面是个有趣的问题:

比如有三个数据:

id obj1 =

id obj2 =

id obj3 = 

如果我们使用常规的方法

NSArray *arr = [NSArray arrayWithObjects:obj1,obj2,obj3,nil];

然后使用字面量数组:

NSArray *arr= @[obj1,obj2,obj3];

此时如果obj2为空,而其他两者不为空,那么对于我们常规创建的方法,数组中只有obj1,而对于字面量数组则会报错。常规创建只有obj1的原因是arrayWithOObjects方法会依次处理各个参数,直到发现nil为止。所以obj2是nil函数就执行结束了。

-------------------------------------------------------------------------------------------------------------------------------------------

字面量字典

传统的创建方式可能是:

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Scott",@"name",@"boy",@"gender",@"beijing",@"address",nil];

如果使用字面量字典,创建方式如下:

NSdictionary *dic = @{@"name":@"Scott",@"gender":@"boy",@"address":@"beijing"};

与数组一样,一旦值为nil,便会抛出异常。

同样的,原来的取方法为:

NSString *gender = [dic objectForKey:@"gender"];

现在我们只需要:

NSString *gender = dic[@"gender"];

当然也可以按照上面的取字面量字典的值。如果是可变的数组或者字典,可以采用下标来进行改变:

mutalbeArr[1] = @"chicken";mutableDic[@"name"] = @"Scott Zhang";

字面量变量就简单介绍这么多吧。

-------------------------------------------------------------------------------------------------------------------------------------------

总结:

①、一定要注意在字典或者数组的时候值为nil会抛出异常,一定要保证值不包含nil.