编写 Objective-C程序时,总会用到某几个类,它们属于 Foundation框架。虽然从技术 上来说,不用 Foundation框架也能写出 Objective-C代码,但实际上却经常要用到此框架。
这几个类是 Nsstring、 Nsnumber、 Nsarray、 Nsdictionary。从类名上即可看出各自所表示 的数据结构。
整数int、浮点数float、布尔值BOOL 封装成Objective-C对象。这种情况下可以用Nsnumber类,该类可处理多种类型的数值。
NSNumber *intNum = [NSNumber numberWithInt:10];
使用字面量语法:
NSNumber *intNum = @(10);
NSNumber *folatNum = @2.5f;
NSNumber *doubleNum = @3.14;
NSNumber *boolNum = @YES;
NSNumber *charNum = @'a';
字面量表达式:
NSNumber *expNum = @(5 * 3.14);
字面量数组
数组是常用的数据结构。如果不使用字面量语法,那么就要这样来创建数组:
NSObject *obj2;
NSArray *array = [NSArray arrayWithObjects:@"item1",obj2,@"item3",nil];
这样做会有一个问题,假如obj2为nil,arrayWithObjects方法会依次处理每个对象,遇到nil会提前结束
字面量数组:
NSArray *array = @[@"item1",obj2,@"item3"];
而使用字面量,会在运行时抛出异常,这个微妙的差别表明,使用字面量语法更为安全,抛出异常令应用程序终止执行,这比 创建好数组之后オ发现元素个数少了要好。向数组中插入nil通常说明程序有错,而通过异 常可以更快地发现这个错误
字面量字典
NSObject *value1 = [NSObject new];
NSObject *value2 = [NSObject new];
NSObject *value3 = [NSObject new];
NSObject *value4 = [NSObject new];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
value1,@"key1",
value2,@"key2",
value3,@"key3",
value4,@"key4", nil];
默认创建字典会感到奇怪,就是<value>,<key>,<value>,<key>,<value>,<key>,...这样反过来的形式,以及中间用,隔开
使用字面量字典:
NSDictionary *dic = @{
@"key1":value1,
@"key2":value2,
@"key3":value3,
@"key4":value4,
};
写法更简明,而且键出现在对象之前,理解起来较顺畅,字典中的对象和键必须都是 Objective-C对象
假如:
NSDictionary *dic = @{
@"key1":value1,
@"key2":value2,
@"key3":3.14,
@"key4":value4,
};
这种形式会编译报错,可以通过@3.14将其封装在 Nsnumber实例中,
与数组一样,用字面量语法创建字典时也有个问题,那就是一旦有值为nil,便会抛出异常。不过基于同样的原因,这也是个好事。假如在创建字典时不小心用了空值对象,那么dictionaryWithobjectsAndkeys:方法就会在首个nil之前停下,而使用字面量会在运行期间抛出异常,这有助于排错。
注意点:
- 使用字面量语法创建出来的字符串、数组、字典对象都是不可变的。若想 要可变版本的对象,则需复制一份:
NSMutableArray *mutArray = [@[@"item1",@"item2",@"item3"] mutArray];
- 用字面量语法创建数组或字典时,若值中有nil,则会抛出异常。因此,必须确保值里不含nil
网友评论