XCode4.4新特性

翻译 2012年07月26日 21:49:15

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



相关文章推荐

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

========================self、super========================
  • houseq
  • houseq
  • 2014年08月11日 16:29
  • 904

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

------------------------initialize------------
  • houseq
  • houseq
  • 2014年08月11日 15:34
  • 1189

ios开发xcode4.4(ios6)的一些新特性

方法顺序   如果有以下代码: 01 02 03 04 05 06 07 08 09 10 11 ...

Android 4.4 新特性分析-15项大改进

转自:http://www.oschina.net/news/45603/android-4-4-new-features Google发布了Android 4.4 KitKat,并...

Android 4.4新特性——沉浸式

  • 2015年11月13日 16:58
  • 1.41MB
  • 下载

Android 4.4新特性——透明状态栏

  • 2015年11月13日 15:17
  • 1.41MB
  • 下载

Android 4.4 新特性分析-15项大改进!

摘要: Google发布了Android 4.4 KitKat,并其同时面世的还有新旗舰Nexus 5。Android 4.4 KitKat有怎样的改进、是否值得升级呢,下面就为大家呈现Android...

Translucent System Bars-4.4新特性

概念Google官方文档4.4APIs_KITKAT 该特性是在Android 4.4 KITKAT版本(API_19)中引入的新特性。也就是我们说的 透明栏 ,国内一般称之为 沉浸式顶栏。在 And...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XCode4.4新特性
举报原因:
原因补充:

(最多只允许输入30个字)