iOS:新特性二(iOS5.1/xcode4.4)--LLVM4.0

来源:互联网 发布:歼二十 知乎 编辑:程序博客网 时间:2024/05/20 19:48

           苹果在WWDC2012大会上介绍了大量Objective-C的新特性。在更新的XCode4.4版本中,这些新特性已经可以使用了。

参考:http://blog.devtang.com/blog/2012/08/05/use-modern-objective-c/

============局部的函数调用不用前向申明============

        这虽然是一个挺小的改进,但是很贴心。假如我们在一个源文件中有2个函数:分别名为foo 和 bar,其中foo的定义在bar前面。那如果在foo函数内部直接调用bar,编译器会报警告说找不到函数bar。
        而现在,我们可以随意地在源文件中放置函数bar的位置。编译器在找不到bar时,会再源码后面找,如果找到了bar,就不会报错了。

============带有类型的enum============

        现在我们可以定义enum是无符号整数还是整数,这样编译器会更加智能的做类型检查。如下所示:

typedef enum TableViewCellType : NSInteger {    TableViewCellTypeQueue,    TableViewCellTypeNewFans,    TableViewCellTypeUserInfo,    TableViewCellTypeOrganization,    TableViewCellTypeFeedback,    TableViewCellTypeRateApp,    TableViewCellTypeRecommendation,    TableViewCellTypeLogout}TableViewCellType;
============默认生成@synthesize代码============

       编辑器发现你没有写 @synthesize时,会自动帮你加上这一行。@synthesize XX = _XX。这同时在另一方面,起到了鼓励大家使用以下划线开头的变量名作为成员变量名的作用。

       当然,为了向下兼容,如果你的程序里面已经有了 @property 变量对应的 @synthesize 代码时,编辑器就不会自动帮你增加这个代码了。详见《iOS:属性...》。

       另外有2种特殊情况下,即使你没有写 @synthesize ,编辑器也不会自动帮你加上,这2种情况是:
1.你同时提供了该property的setter 和 getter方法
2.你的这个property是 readonly 的,并且你提供了其getter方法

============遍历元素============

       以前:一种是用 for in,另一种是用一个变量来循环取值;

  NSArray * lines = ...    for (NSString * line in lines) {       // ...    }    for (int i = 0; i < lines.count; ++i) {        NSString * s = [lines objectAtIndex:i];        ...    }// 如果是字典,遍历的代码就要稍微复杂一点了:    NSDictionary * dict = …    NSArray * keys = [dict allKeys];    for (NSString * key in keys) {        NSString * value = [dict objectForKey:key];    }
        xcode对于iOS4.0以上的系统,支持用block来遍历元素了。用block来遍历字典可以简化代码的编写,建议大家都使用上这个新特性
[lines enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {}];[_urlArguments enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {}];

0 0