XCode4.4新特性

出处: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

NSArray Literals

以前:

array = [NSArray arrayWithObjects:a, b, c, nil]; 

现在:

array = @[ a, b, c ]; 

NSDictionary Literals

以前:

dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]                                    forKeys:@[k1, k2, k3]]; 

现在:

dict = @{ k1 : o1, k2 : o2, k3 : o3 }; 

NSNumber Literals

以前:

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字符,布尔值,枚举常量,字符串:

XCode4.4新特性_第1张图片

XCode4.4新特性_第2张图片

你可能感兴趣的:(apple,properties,osx,Deployment,XCode4,Literals)