出处:http://stackoverflow.com/questions/9347722/apple-llvm-4-0-new-features-on-xcode-4-4-literals
重要新增特性:
• 使用 properties 默认生成 Objective-C @synthesize 命令
• Objective-C 为数值、数组、字典和表达式增加文字语法
• Apple LLVM 编译器支持附加的 C++11 特性,包括 lambda 表达式
• Assistant editor tracks caller or callee for the current selection.
• 新的本地化工作流可在 OS X 的多个 Locale 中分享单个 .xib 文件
• 源代码可单独提交所选的更改
• ARC 移植工具转换包括 retain/released 和垃圾收集代码
• Fixes an issue where code completion could fail, requiring the user to delete derived data
主要讲讲文字语法:literal syntax
更多关于literal syntax内容参看:http://clang.llvm.org/docs/ObjectiveCLiterals.html
以前:
array = [NSArray arrayWithObjects:a, b, c, nil];
现在:
array = @[ a, b, c ];
以前:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3] forKeys:@[k1, k2, k3]];
现在:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
以前:
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];
现在:
NSNumber *number; number = @'X'; number = @12345; number = @12345ul; number = @12345ll; number = @123.45f; number = @123.45; number = @YES;
数组,字典获取元素:
arr[1] = [arr objectAtIndex:1] dict["key"] = [dict objectForKey:@"key"]
刚更新XCode4.4用了下,@YES和@NO要报错,只有设置deployment target为ios6或osx10.8才行,ios6还没正式出来,要使用@YES,可以添加如下宏到xxx.pch文件中:
#ifndef __IPHONE_6_0
#if __has_feature(objc_bool)
#undef YES
#undef NO
#define YES __objc_yes
#define NO __objc_no
#endif
#endif
另外数组和字典的定义用[]和{}没问题,但通过arr[1]和dict["key"]方式获取数据会报错,也是只能设置deployment target为ios6或osx10.8,目前若要使用,可自己写这两个类的类别,定义如下函数:
NSArray
: - (id)objectAtIndexedSubscript: (NSUInteger)index;
NSMutableArray
: - (void)setObject: (id)obj atIndexedSubscript: (NSUInteger)index;
NSDictionary
: - (id)objectForKeyedSubscript: (id)key;
NSMutableDictionary
: - (void)setObject: (id)obj forKeyedSubscript: (id)key;
以NSArray为例,函数体:
- (id) objectAtIndexedSubscript:(NSUInteger)index{ return [self objectAtIndex:index]; }
另外apple默认实现的setObject函数并没有添加/删除元素,可自定义如下函数体实现:
- (void) setObject:(id)obj atIndexedSubscript:(NSUInteger)index{ if (index < self.count){ if (obj) [self replaceObjectAtIndex:index withObject:obj]; else [self removeObjectAtIndex:index]; } else { [self addObject:obj]; } }
自定义以上类别,可以在pch文件中#import,从而可在项目中任意使用。
以上信息来源:http://stackoverflow.com/questions/11425976/objective-c-literals-accessing-nsarray
表达式:
此种语法适用于算式表达式,c字符,布尔值,枚举常量,字符串: