今年WWDC 2012苹果全球开发者大会上,苹果针对LLVM编译器都做了重大改进,新版的Xcode 4.4中的LLVM编译器升级到了4.0,给Objective-C带来了很多令人惊喜的特性。
注意,下面的语法需要下载Xcode 4.4。
1、枚举类型的改变
老写法:
- typedef enum Week{
- Moday,
- Tuesday,
- Wednesday,
- Thursday,
- Friday,
- Saturday,
- Sunday
- }Week;
老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定
新写法:
- typedef enum Week:NSUInteger{
- Moday,
- Tuesday,
- Wednesday,
- Thursday,
- Friday,
- Saturday,
- Sunday
- }Week;
新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。
2、使用的方法代码放置的位置顺序无关
没在.h文件中声明的方法,在时候的时候如果方法不在前面,可能会有警告。
比如:
- @interface MyClass : NSObject
- -(void)doSomething:(NSString *) print;
- @end
实现:
- @implementation MyClass
- -(void)doSomething:(NSString *)print{
- NSLog(@"%@", [print stringByAppendingFormat:[self getString]]);
- }
- -(NSString *)getString{
- return@"string for something";
- }
- @end
早期编译器编译时会出现:warning: instance method ‘-getString:’ not found…
新的编译器会先扫描代码中的方法,然后再编译,这样就避免了找不到方法这种情况了
3、property属性简化
@property对于使用Objective-C的程序员来说是相当熟悉的,property方便自动生成变量的getter 和setter。在.h文件中声明之后,还要在.m文件中加上@synthesize关键字,这样才能完成自动getter 和setter的过程。
比如说,我在.h文件中写了
@property (strong, nonatomic) NSDictionary *order;
我还要去对于的.m文件中写上
@synthesize order;
是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码,这叫帮人帮到底。
也是说,你在.h文件中声明order属性后,就可以直接在实现文件中使用该属性的getter和setter方法,编译器还会根据属性的可读和可写自动判断是否提供setter方法。智能多了。
4、语法的简化
做过java 或C#开发的都知道,初始化或赋值一个变量一般用一个“=”号就搞定了,到了Objective-C后,每次都要用一个很长的函数才能赋值活初始化。现在简化多了。
咱们看看各个数据类型简化前后的对比。
4.1、NSNumber 类型
老写法:
- 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;
4.2、NSArray类型
老写法:
- NSArray *array;
- array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];
新写法:
- NSArray *array = @[ @"object1", @"object2", @"object3" ];
新的写法去掉了后面讨厌的nil。
4.3、NSDictionary类型
老写法
- NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]
- forKeys:@[@"key1", @"key2", @"key3"]];
新写法
- NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };
- NSLog(@"%@", dict);
运行结果正常:
{
key1 = value1;
key2 = value2;
key3 = value3;
}
5、快速通过下标定位对象
他们说新的语法这样是可以的,数组和字典都可以通过下标访问,
- NSArray *array =@[ @"object1", @"object2", @"object3" ];
- id obj = array[0]; //通过下标方式获取数组对象,替换原有写法:array objectAtIndex:i];
- NSString *obj1 = @"oooo";
- array[0] = obj1; //也可以直接为数组对象赋值。替换原有写法:[array replaceObjectAtIndex:i withObject:newObj];
- NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };
- id obj2 = dict[@"key1"];//获取o2对象,替换原有写法:[dic objectForKey:k2];
- 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 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。
本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...
XCode、Objective-C、Cocoa
展示如何使用Objective-C语言的独有特性以及Foundation框架的众多特性。此外,书中广 泛提供了多种问题的解决方案,包括: ● 使用Xcode进行应用开发 ● 使用字符串、数字与对象集合 ● 使用NSArray、NSString、...
Pro Objective-C The Objective-C programming language continues to grow in popularity and usage because of the power and ease-of-use of the language itself, along with the numerous features that ...
Objective-C 分离 接口和实现文件,具体资料请参考苹果开发者Mike的博文http://blog.sina.com.cn/s/blog_7aa21f320100r7wn.html
iOS 7 Programming Fundamentals: Objective-C, Xcode, and Cocoa Basics by Matt Neuburg (Author) Publisher: O’Reilly Media (October 2013) Language: English ISBN-10: 1491945575 ISBN-13: 978-...
权威解读Objective-C和Cocoa特性.全面涵盖最新技术和新增工具.iPhone、iPad、Mac开发必备.Objective-C是一门面向对象、通用、高级、强大的编程语言。它有着优雅的编程环境,并发扬了C语言的优秀特性,是苹果的iOS和...
Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition).epub (epub 格式) Want to write iOS apps or desktop Mac applications? This introduction to programming and the Objective-C language is ...
13.3 Objective-C2.0的新特性199 13.4 小结200 第14章 AppKit简介201 14.1 构建项目201 14.2 构建AppController@interface203 14.3 InterfaceBuilder203 14.4 布局用户界面205 14.5 连接207 14.5.1 连接输出口207 ...
Programming in Objective-C, 第四版,ePub格式方便在iPad看。 第四版主要更新了 iOS5 与 ARC 的内容,与最新的 Xcode 4.5 匹配。 目录: Table of Contents 1 Introduction Part I: The Objective-C Language 2...
Learn Objective-C for Java Developers Learn Objective-C for Java Developers will guide experienced Java developers into the world of Objective-C. It will show them how to take their existing language...
The fourth edition of this book has been updated to cover the significant changes that first appeared in iOS 5 and Xcode 4.2, including the use of Automatic Reference Counting (ARC) to improve and ...
Cocoa编程经典的入门书籍,图文讲解,易于学习
除了在 Mac系统上使用Objective-C,你还可以在Windows上搭建Objective-C 环境,虽然该环境与mac xcode无法比拟,用于初学者学习objective-c还是可以的
If you want to learn Objective-C 2.0 to write ... Clair begins with a practical refresher on C and object-oriented programming and walks you through creating your first Objective-C program with Xcode.
Cocoa多线程开发Objective-C详解 多线程 Objective-C iOS cocoa Xcode
这是一本Objective-C编程领域最畅销的书籍,...本书已经为iOS5HE Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。