• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Xcode4.4中LLVMcompiler4.0带来的Objective-C新语法特性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

转载自:http://blog.csdn.net/totogo2010/article/details/7990792

今年WWDC 2012苹果全球开发者大会上,苹果针对LLVM编译器都做了重大改进,新版的Xcode 4.4中的LLVM编译器升级到了4.0,给Objective-C带来了很多令人惊喜的特性。

注意,下面的语法需要下载Xcode 4.4。

1、枚举类型的改变

老写法:

  1. typedef enum Week{  
  2.     Moday,  
  3.     Tuesday,  
  4.     Wednesday,  
  5.     Thursday,  
  6.     Friday,  
  7.     Saturday,  
  8.     Sunday      
  9. }Week;  
老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定


新写法:

  1. typedef enum Week:NSUInteger{  
  2.     Moday,  
  3.     Tuesday,  
  4.     Wednesday,  
  5.     Thursday,  
  6.     Friday,  
  7.     Saturday,  
  8.     Sunday      
  9. }Week;  
新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。

2、使用的方法代码放置的位置顺序无关

没在.h文件中声明的方法,在时候的时候如果方法不在前面,可能会有警告。

比如:

  1. @interface MyClass : NSObject  
  2. -(void)doSomething:(NSString *) print;  
  3. @end  

实现:
  1. @implementation MyClass  
  2. -(void)doSomething:(NSString *)print{  
  3.     NSLog(@"%@", [print stringByAppendingFormat:[self getString]]);  
  4. }  
  5. -(NSString *)getString{  
  6.     return@"string for something";  
  7. }  
  8. @end  

早期编译器编译时会出现:warning: instance method ‘-getString:’ not found…

新的编译器会先扫描代码中的方法,然后再编译,这样就避免了找不到方法这种情况了

3、property属性简化

@property对于使用Objective-C的程序员来说是相当熟悉的,property方便自动生成变量的getter 和setter。在.h文件中声明之后,还要在.m文件中加上@synthesize关键字,这样才能完成自动getter 和setter的过程。

比如说,我在.h文件中写了

@property (strongnonatomicNSDictionary *order;

我还要去对于的.m文件中写上

@synthesize order;

是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码,这叫帮人帮到底。

也是说,你在.h文件中声明order属性后,就可以直接在实现文件中使用该属性的getter和setter方法,编译器还会根据属性的可读和可写自动判断是否提供setter方法。智能多了。

4、语法的简化

做过java 或C#开发的都知道,初始化或赋值一个变量一般用一个“=”号就搞定了,到了Objective-C后,每次都要用一个很长的函数才能赋值活初始化。现在简化多了。

咱们看看各个数据类型简化前后的对比。

4.1、NSNumber 类型

老写法:

  1. NSNumber *number;  
  2. number = [NSNumber numberWithChar:'X'];  
  3. number = [NSNumber numberWithInt:12345];  
  4. number = [NSNumber numberWithUnsignedLong:12345ul];  
  5. number = [NSNumber numberWithLongLong:12345ll];  
  6. number = [NSNumber numberWithFloat:123.45f];  
  7. number = [NSNumber numberWithDouble:123.45];  
  8. number = [NSNumber numberWithBool:YES];  

新写法:

  1. NSNumber *number;  
  2. number = @'X';  
  3. number = @12345;  
  4. number = @12345ul;  
  5. number = @12345ll;  
  6. number = @123.45f;  
  7. number = @123.45;  
  8. number = @YES;  

4.2、NSArray类型

老写法:

  1. NSArray *array;  
  2. array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];  

新写法:

  1. NSArray *array = @[ @"object1", @"object2", @"object3" ];  

新的写法去掉了后面讨厌的nil。

4.3、NSDictionary类型

老写法

  1. NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]  
  2.                                    forKeys:@[@"key1", @"key2", @"key3"]];  
新写法

  1. NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };  
  2. NSLog(@"%@", dict);  

运行结果正常:

{

    key1 = value1;

    key2 = value2;

    key3 = value3;

}

5、快速通过下标定位对象

他们说新的语法这样是可以的,数组和字典都可以通过下标访问,

  1. NSArray *array =@[ @"object1", @"object2", @"object3" ];  
  2.   
  3. id obj = array[0]; //通过下标方式获取数组对象,替换原有写法:array objectAtIndex:i];  
  4. NSString *obj1  = @"oooo";  
  5. array[0]  = obj1; //也可以直接为数组对象赋值。替换原有写法:[array replaceObjectAtIndex:i withObject:newObj];  
  6.   
  7. NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };  
  8. id obj2 = dict[@"key1"];

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
转载10款iOS高效开发必备的Objective-C类库发布时间:2022-07-12
下一篇:
objective-C自定义对象归档的实现发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap