写这篇博客源于一个疑问:“WoK~, 这也行?!”。刚接触OC不久,今天做深浅拷贝的测试,无意中把获取NSArray的值写成了用下标获取的方式。当时把注意力放在了深浅拷贝的内存地址分析上了,就没太在意,测试做完啦,在回顾的时候发现数组是用下标的方式获取的! 于是就有了个疑问,在OC中这样写也行?不是NSArray中有一个方法叫做objectAtIndex来专门获取数组的元素嘛,嗯~用下标也行?此时心里窃喜,可以简化一下数组访问元素的方式了,又可以偷懒啦!!为了更好的偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4中LLVM compiler 4.0’ 引入的新特性(2012年WWDC发布的东西)。到这小菜本人就有柳暗花明又一村的感觉啦~就可以好好的偷一下懒啦~于是系统的总结了一下引入的新的特性,话不多说,Coder说话哪能少的了code呢!ludashi~走起~(虽然是12年的东西,这不刚学蛮~在OC中用感觉挺新鲜的,简化后对字典的初始化感觉和PHP有点相似~感觉见到亲人啦~)
问题是数组引起的那么就从数组开始吧
1.一般数组的初始化和访问数组元素是这样的
在之前的博客中我是这样初始化NSArray的:
1 //NSArray的便利初始化 2 NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil]; 3 //NSArray的便利构造器 4 NSArray *array2 = [NSArray arrayWithObjects:@"111", @"222", @"333", nil];
获取数组的元素
//获取相应索引的元素 id element = [array1 objectAtIndex:0]; NSLog(@"array1_count = %d, array[0] = %@", count, element);
简化后的数组初始化和访问的做法如下
1 //NSArray的定义 2 NSArray *array = @[@"lu", @"da", @"shi", @YES, @123]; 3 int count = (int)[array count]; 4 5 for (int i = 0; i < count; i++) 6 { 7 NSLog(@"%@", array[i]); 8 }
2.对字典(NSDictionary)的简化
也引用我之前博客中得一段代码吧
//不可变字典的初始化 NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; id value = [dictionay objectForKey:@"key1"]; NSLog(@"key1 => %@", value);
我们还可以这样做
//NSDictionary的定义简化 NSDictionary *dictionary = @{ @"key0" : @"value0", @"key1" : @"value1", @"key2" : @"value2" }; NSLog(@"key2 => %@", dictionary[@"key2"]);
3.对NSNumber简化
我们可以这样做
把基本类型包装成对象的便利构造函数 -(id) initWithChar : (char) value; -(id) initWithInt : (int) value; -(id) initWithFloat : (float) value; -(id) initWithBool: (BOOL) value; 把基本数据类型包装成对象的便利构造器 +(id) numberWithChar : (char) value; +(id) numberWithInt : (int) value; +(id) numberWithFloat : (float) value; +(id) numberWithBool : (BOOL) value;
我们也可以这样做,说明:在char转换为NSNumber是存的是ASCII码的形式,c输出为97
//NSNumber的简化
NSNumber *a = @123;
NSNumber *b = @11.2;
NSNumber *c = @('a');
NSLog(@"a = %@, b = %@, c = %@", a, b, c);
总浏览量
8,960次
博客园历史 5,371 腾讯云 1,854 阿里云 1,734 本站新增 1
本站阅读按浏览器在 15 分钟内去重;禁用浏览器存储时按网络地址去重。推荐按浏览器一年内去重。仅使用站内随机标识,不采集浏览器指纹。
分享这篇文章
原创内容,未经授权禁止转载。
欢迎分享原文链接。除另有署名或许可说明外,本站原创文章的著作权由青玉伏案享有;未经书面授权,禁止整篇转载、复制发布、改编传播或建立内容镜像。
版权与使用条款
- 依法属于合理使用、法定许可等情形的,按法律规定执行;引用时应注明作者、作品名称和原文链接,不得歪曲、篡改或隐去署名。
- 经书面授权使用的,请遵守约定的用途、范围与署名要求。注明出处不等同于已经取得整篇转载或其他使用授权。
- 第三方图片、引用内容和书籍封面等权利归相应权利人所有;开源代码与 Demo 按其各自许可证使用,本声明不改变已有许可。
- 本声明参考《中华人民共和国著作权法》第十条、第二十四条、第五十二条等。对侵权使用,权利人保留依法要求停止侵害并追究相应责任的权利。

确实,看WWDC的东西很是涨姿势,不过这些特性在现在看来,呵呵.你懂的.
2014的WWDC也推出了好多新特性.之前的都没有来得及看完...
路漫漫其修远兮啊.
很棒,一个奇妙的转变顺序,最开始的使用 alloc init 构造,然后 使用@[],再后来又回到 alloc init 现在明白这是语法糖 以后就不会刻意纠结这些问题了.