关闭

XCode4.4新特性

标签: xcode4literalsdeploymentosxappleproperties
2476人阅读 评论(0) 收藏 举报
分类:

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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:105205次
    • 积分:1075
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:13篇
    • 译文:2篇
    • 评论:45条
    文章分类
    最新评论