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

在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代码啦。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值