`

Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性

阅读更多

http://blog.csdn.net/totogo2010/article/details/7990792

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

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

1、枚举类型的改变

老写法:

 

[cpp] view plaincopy
 
  1. typedef enum Week{  
  2.     Moday,  
  3.     Tuesday,  
  4.     Wednesday,  
  5.     Thursday,  
  6.     Friday,  
  7.     Saturday,  
  8.     Sunday      
  9. }Week;  

老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定

 


新写法:

 

[cpp] view plaincopy
 
  1. typedef enum Week:NSUInteger{  
  2.     Moday,  
  3.     Tuesday,  
  4.     Wednesday,  
  5.     Thursday,  
  6.     Friday,  
  7.     Saturday,  
  8.     Sunday      
  9. }Week;  

新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。

 

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

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

比如:

 

[cpp] view plaincopy
 
  1. @interface MyClass : NSObject  
  2. -(void)doSomething:(NSString *) print;  
  3. @end  


实现:

[cpp] view plaincopy
 
  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 类型

老写法:

 

[cpp] view plaincopy
 
  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];  

 

新写法:

 

[cpp] view plaincopy
 
  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类型

老写法:

 

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


新写法:

 

 

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


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

 

4.3、NSDictionary类型

老写法

[cpp] view plaincopy
 
  1. NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]  
  2.                                    forKeys:@[@"key1", @"key2", @"key3"]];  

新写法

 

 

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

 

运行结果正常:

{

    key1 = value1;

    key2 = value2;

    key3 = value3;

}

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

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

 

[cpp] view plaincopy
 
  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"];//获取o2对象,替换原有写法:[dic objectForKey:k2];  
  9. dict[@"key2"] = obj;  //重新为键为k2的对象赋值,替换原有写法:[dic setObject:newObj forKey:k2]  

可是事实是这样的:

 


现实总是残忍的。于是google 了一下,发现这个语法是针对iOS 6 or OS X 10.8 SDKs的,我没有ios 6模拟器而已没有10.8 SDKs。所以报错了。可以参考这里:http://stackoverflow.com/questions/11425976/compiler-error-expected-method-not-found-when-using-subscript-on-nsarray

下面是WWDC 2012视频的一些关于新语法特性的截图:

截图可以给你解释,新的语法特性编译器是怎么实现的。

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

分享到:
评论

相关推荐

    Objective-C 基础语法

    ### Objective-C基础语法详解 #### 一、Objective-C简介与特性 Objective-C是一种面向对象的编程语言,它是在标准C语言的基础上发展起来的,并且完全兼容C语言。由于其面向对象的特性,Objective-C被广泛应用于苹果...

    Objective-C编程全解最新版.pdf.zip

    1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...

    Objective-C基础教程(入门教程).pdf

    6. 异常处理(Exceptions):在Objective-C中,可以使用@try, @catch, 和@finally语句来处理异常情况,这是C语言没有的特性。 7. 继承和多态(Inheritance, Polymorphism):Objective-C支持继承,允许创建子类继承...

    《Objective-C基础教程》中文版(含源代码)

    《Objective-C基础教程》是一本面向初学者的编程书籍,主要涵盖了Objective-C语言的基本概念、语法和编程实践,尤其适合那些想要踏入iOS应用开发领域的学习者。Objective-C是Apple公司开发的面向对象的编程语言,它...

    Objective-C语言教程:从基础语法到高级特性全面解析

    内容概要:本文是一份详细的Objective-C语言教程,涵盖从基础语法到高级特性的全面内容。主要内容包括Objective-C的简介、应用场景、开发环境配置、基础语法、面向对象编程、内存管理、Foundation框架、分类与协议、...

    Objective-C语法快速参考

    ### Objective-C语法快速参考知识点详解 #### 一、Objective-C简介与基础知识 Objective-C是一种面向对象的编程语言,它在C语言的基础上增加了面向对象的功能。由于Objective-C是苹果公司在其操作系统(如macOS和...

    Object+C语法快速入门-Objective-C的语法

    大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是在说我自己。 如果你和我...

    Objective-C程序设计 第6版 pdf

    4. **Objective-C 2.0新特性**:第六版可能会涵盖Objective-C 2.0引入的一些新特性,如垃圾回收、属性(properties)和块(blocks)等,这些都是现代Objective-C编程不可或缺的部分。 5. **内存管理**:Objective-C...

    Objective-C程序设计(第4版)(全球最畅销Objective-C编程书籍)

     《Objective-C 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。

    Objective-C语法总结

    Objective-C是一种面向对象的编程语言,它在C语言的基础上扩展了一些特性,主要应用于Apple的iOS和macOS平台上的软件开发。XCode是Apple提供的一款集成开发环境(IDE),集成了代码编辑器、编译器、调试工具等,是...

    Objective-C专业书籍汇总pdf

    Objective-C 2.0带来了许多改进,这本书会深入探讨这些新特性。这可能包括垃圾回收(Garbage Collection)的引入,虽然在现代Xcode中已被 ARC(Automatic Reference Counting)取代,但理解其工作原理仍然有价值。...

    objective-c基础教程

    Objective-C继承了C语言的基础语法结构,并在此基础上增加了面向对象的特性,包括类(Class)、对象(Object)、消息传递(Message Passing)等概念。具体特点如下: 1. **动态性**: Objective-C是一种动态类型的语言,这...

    Objective-C基础教程 中文 PDF 清晰版 [31M]

    本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...

    好学的Objective-c(高清版)PDF

    Objective-C的起源可以追溯到C语言,它扩展了C的语法,加入了Smalltalk的面向对象特性。在Objective-C中,类是对象的蓝图,对象则是程序中的基本工作单元。理解类和对象的概念是学习Objective-C的第一步。 首先,你...

    Pro Objective-C

    由于其本身的强大功能和易用性,以及不断添加的新特性,Objective-C的普及度和使用率持续增长。《Pro Objective-C》这本书是为了那些已经具备基础Objective-C知识,希望进一步提升自己专业水平的开发者们准备的。 ...

    Objective-C基础教程源代码 Learn objective-C on the Mac Mark Dalrymple著书

    1. **Objective-C语法**:Objective-C的语法基于C语言,但引入了类、接口和消息传递等概念。这包括定义类、属性(@property)和方法(@selector)的语法,以及理解类接口(.h)和实现(.m)文件的作用。 2. **对象...

    Learning Cocoa With Objective-C

    Objective-C是Cocoa的主要编程语言,它扩展了C语言,引入了面向对象的特性,如消息传递和类别。 本书首先会引导读者了解Objective-C的基础,包括语法、类、对象以及内存管理。然后,它会深入Cocoa的核心组件,如...

Global site tag (gtag.js) - Google Analytics