您的位置:首页 > 其它

Xcode4.4、4.5新特性,LLVM 4.0新语法

2013-05-14 14:32 183 查看
在Xcode4.5以上,增加了许多新的特性,其中包括很方便的代码输入,可以大大提高写代码的效率。

1.NSNumber

从Xcode4.4起,所有的NSNumber都可以用@123来表示,如:

//单个字符

NSNumber *numA = @'A'; //相当于[NSNumber
numberWithChar:'A'];
//整形

NSNumber *numInt =@123; //相当于[NSNumber
numberWithInt:123];

NSNumber *numUnsigned =@123U; //相当于[NSNumber
numberWithInt:123U];

NSNumber *numLong =@123L; //相当于
[NSNumber numberWithLong:123L];

NSNumber *numLongLong =@123LL; //相当于[NSNumber
numberWithLongLong:123LL];
//浮点

NSNumber *numFloat =@1.2345F; //相当于
[NSNumber numberWithFloat:1.2345F];

NSNumber *numDouble =@1.2345; //相当于
[NSNumber numberWithDouble:1.2345];

//bool

NSNumber *numYes =@YES; //相当于[NSNumber
numberWithBool:YES];

NSNumber *numNO =@NO; //相当于[NSNumber
numberWithBool:NO];

2.NSArray,NSDictionary

// NSArray *arr = [NSArray arrayWithObjects:@"one",@"name",@"123", nil];
NSArray *newArr =@[@"one",@"name",@123];

// NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Jim",@"name",[NSNumber numberWithInt:20],@"age", nil];
NSDictionary *newDic =@{
@"name":@"Jim",
@"age":@20
};
怎么样,是不是简单了很多啊?而且,为了方便你的旧代码迁移新的写法,Xcode还专门提供了转换工具,选择Edit--> Refactor--> Convert to Modern Objective-CSyntax即可。

3.嵌套表达式(Boxed Expressions)
最新版本的OC还提供了一种新的书写方式:@(expression)
有时候BooL和int的值是由计算得到的,这时候就可以将计算的表达式放到括号内,比如:

NSNumber *diff =@(1.2f-2.0f);
//相当于[NSNumber numberWithFloat:1.2f-2.0f];

4.创建新的property不用再合成
Xcode4.4之后,在头文件中创建property,无需再合成@synthesize,Xcode会自动合成@synthesize object = _object;

5.遍历元素
通常遍历元素有两种方式,一种是用for in,一种是用变量来循环数组下标,如:

NSArray *arr =@[@"one",@"two",@"three"];
for (NSString *strin arr)
{
//...
}
for (int i =0;i <
3;i++)
{
//...
}
如果是字典的话,遍历的代码会稍微复杂点,如:

NSDictionary *dic =@{
@"name":@"Jim",
@"age":@"20",
@"sex":@"boy"};
NSArray *keys = [dic
allKeys];
for (NSString *keyin keys)
{
NSString *value = [dic
objectForKey:key];
}
现在,Xcode4.5以上支持用block来遍历元素了,用block来遍历元素可以简化代码的编写,如:

[arrenumerateObjectsUsingBlock:^(id obj,NSUInteger idx,
BOOL *stop) {
//...
}];

[dicenumerateKeysAndObjectsUsingBlock:^(id key,id obj,
BOOL *stop) {
//...
}];
而且以前的[arrobjectAtIndex:i] 和 [arr
replaceObjectAtIndex:i
withObject:object],现在可以直接写成arr[i]和arr[i] = object 了。如:

NSArray *arr =@[@"one",@"two",@"three"];
[arrenumerateObjectsUsingBlock:^(id obj,NSUInteger idx,
BOOL *stop) {
NSString *str = arr[idx];
}];
这个改进对NSDictionary同样有效,如:

NSDictionary *dic =@{
@"name":@"Jim",
@"age":@"20",
@"sex":@"boy"};
[dicenumerateKeysAndObjectsUsingBlock:^(id key,id obj,
BOOL *stop) {
NSString *str = dic[key];

NSLog(@"key = %@,str = %@",key,str);
}];

Tips:
上面提到写property的时候不用再合成@synthesize了,那原来写的那么多的@synthesize怎么办呢?删掉?怎么删呢?一个文件一个文件打开,然后一行行的删掉吗?放心,苹果已经帮我们想好了解决方案。(当然,你也可以选择不删,不会有任何的影响)
在WWDC2012 Session 400 Developer Tools Kickoff中,苹果介绍了具体做法,步骤如下:
1.首先使用区域查找,因为一般项目都会依赖第三方的开源库,我们不想更改别人的库,所以我们只查找我们库的文件,如下图所示:



2.接着我们用正则匹配,找到以@synthesize开头,后面接着var=_var;格式的行。
插入正则表达式很简单,直接点击查找输入框左边的放大镜,选择"insert pattern",苹果就会把常见的正则表达式都列出来,你直接选择就可以了,非常的方便。如图:



在插入合适的正则表达式后,回车,就可以看到搜索结果啦。



3.点击搜索界面的preview按钮,查看替换结果,可以看到,对于我们的测试代码,Xcode生成的预览图已经正确的当对应的代码删掉了。然后我们点击替换,就可以去掉所有的@synthesize代码啦。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: