Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化
2015-04-14 13:09
337 查看
从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性。创建数组NSArray,哈希表NSDictionary, 数值对象NSNumber时,可以像NSString的初始化一样简单方便。妈妈再也不担心程序写得手发酸了。
有兴趣的朋友可以关注LLVM编译器的相关文档:http://clang.llvm.org/docs/ObjectiveCLiterals.html
关于NSDictionary和NSNumber的例子来自:http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and
I. NSArray
首先是非常常用的NSArray,NSMutableArray。NSArray是一个初始化后就固定的静态数组。如果想对数组的元素进行插入,删除,更新等操作,就得使用Objective-C 的动态数组NSMutableArray。
在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之后也可以继续使用。
//LLVM4.0之前 NSArray的初始化
NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];
// 取得数组第2个值
NSString *s = [oldOne objectAtIndex:1];
在LLVM4.0之后,NSArray的初始化方法如下。
NSArray *newOne =@[@"1st", @"2nd", @"3th”];
// 取得数组第2个值
NSString *s = newOne[1];
特别要说一下NSMutableArray。LLVM4.0之前,如果你要更新数组的某个元素,一般使用下面的方法。
//LLVM4.0之前 NSMutableArray的初始化
NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];
[mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某个元素
在编写一些常用算法时,下面的特性导致编写起来有一点麻烦。
/*想更新NSMutableArray的某个元素?请先初始化这个元素*/
NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];
/*必须如下给每个元素赋一个初值,否则exception会发生
for (int h = 0; h < 5; h++) {
[oldMutable addObject:@"1"];
}
@try{
[mutable replaceObjectAtIndex:1 withObject:@"disposed"];
}
@catch(NSException *exception){
NSLog(@“%@“, [exception description]);
}
这而LLVM4.0简化了这一个过程,可以用如下方式简单完成。
//LLVM4.0之后
NSMutableArray *newMutable = [NSMutableArray alloc] init];
newMutable[2] = @"myObject";
突然觉得世界清爽了不少,对于熟悉C语言和java等的童鞋来说,是不是觉得亲切多了?
关于NSDictionary和NSNumber的变化如下, 就不细说啦。
II.NSDictionary
一般性的写法:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
LLVM4.0之前后:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
III. NSNumber
一般性的写法:
NSNumber *number;
number = [NSNumber numberWithChar:'X'];
number = [NSNumber numberWithInt:12345];
number = [NSNumber numberWithUnsignedLong:12345ul];
number = [NSNumber numberWithLongLong:12345ll];
number = [NSNumber numberWithFloat:123.45f];
number = [NSNumber numberWithDouble:123.45];
number = [NSNumber numberWithBool:YES];
LLVM4.0之前后:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
有兴趣的朋友可以关注LLVM编译器的相关文档:http://clang.llvm.org/docs/ObjectiveCLiterals.html
关于NSDictionary和NSNumber的例子来自:http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and
I. NSArray
首先是非常常用的NSArray,NSMutableArray。NSArray是一个初始化后就固定的静态数组。如果想对数组的元素进行插入,删除,更新等操作,就得使用Objective-C 的动态数组NSMutableArray。
在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之后也可以继续使用。
//LLVM4.0之前 NSArray的初始化
NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];
// 取得数组第2个值
NSString *s = [oldOne objectAtIndex:1];
在LLVM4.0之后,NSArray的初始化方法如下。
NSArray *newOne =@[@"1st", @"2nd", @"3th”];
// 取得数组第2个值
NSString *s = newOne[1];
特别要说一下NSMutableArray。LLVM4.0之前,如果你要更新数组的某个元素,一般使用下面的方法。
//LLVM4.0之前 NSMutableArray的初始化
NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];
[mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某个元素
在编写一些常用算法时,下面的特性导致编写起来有一点麻烦。
/*想更新NSMutableArray的某个元素?请先初始化这个元素*/
NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];
/*必须如下给每个元素赋一个初值,否则exception会发生
for (int h = 0; h < 5; h++) {
[oldMutable addObject:@"1"];
}
@try{
[mutable replaceObjectAtIndex:1 withObject:@"disposed"];
}
@catch(NSException *exception){
NSLog(@“%@“, [exception description]);
}
这而LLVM4.0简化了这一个过程,可以用如下方式简单完成。
//LLVM4.0之后
NSMutableArray *newMutable = [NSMutableArray alloc] init];
newMutable[2] = @"myObject";
突然觉得世界清爽了不少,对于熟悉C语言和java等的童鞋来说,是不是觉得亲切多了?
关于NSDictionary和NSNumber的变化如下, 就不细说啦。
II.NSDictionary
一般性的写法:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
LLVM4.0之前后:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
III. NSNumber
一般性的写法:
NSNumber *number;
number = [NSNumber numberWithChar:'X'];
number = [NSNumber numberWithInt:12345];
number = [NSNumber numberWithUnsignedLong:12345ul];
number = [NSNumber numberWithLongLong:12345ll];
number = [NSNumber numberWithFloat:123.45f];
number = [NSNumber numberWithDouble:123.45];
number = [NSNumber numberWithBool:YES];
LLVM4.0之前后:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
相关文章推荐
- Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化
- 在Objective-C 中使用字符生成NSArray、NSDictionary、NSNumber
- Xcode4.4(LLVM4.0编译器)中NSArray, NSDictionary, NSNumber优化写法
- Objective-C中关于请求返回NSData数据解析成NSDictionary或NSArray的方法
- [Objective-C] NSArray/NSDictionary/NSNumber 的语法糖
- Objective-C中关于请求返回NSData数据解析成NSDictionary或NSArray的方法
- 容器类的常用操作(NSArray,NSNumber,NSDictionary,NSSet)
- 用 ObjectiveSugar 扩展NSArray NSDictionary NSSet NSNumber
- Objective-c 的一些基础知识,NSString,NSNumber,NSArray 等
- 关于继承NSDictionary之后出现 [NSArray count]: method only defined for abstract class的问题
- objective-c 基础教程 读书笔记之第八章集合家族简介,NSArray,NSDictionary
- 不一样的NSNumber、NSArray和NSDictionary
- Objective-C数组 NSArray与NSMutableArray的区别 NSDictionary与 NSMutableDictionary 的区别 == int,NSInteger,NSUIn
- Objective C - Foundation - NSNumber & NSString & NSArray & NSDictionary & NSSet
- OC第五讲(NSNumber,NSArray,NSDictionary,NSSet等)
- 【原创】关于在Objective-C中使用C语言数组的使用和NSArray的差别,以及由此可能产生的一个BUG
- 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary
- 关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary
- Objective-C数组 NSArray与NSMutableArray的区别 NSDictionary与 NSMutableDictionary 的区别 == int,NSInteger,NSUIn
- Objective-C中关于NSDictionary的一些常用的操作方法