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

           苹果在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) {
}];

你可能感兴趣的:(xcode,Objective-C,4)