基于Xcode4.4(不完全独有)。
1. 成员方法无需前置声明
之前,我们调用一个定义在后面(未声明)的成员方法,比如[self callSomeMethod],会得到警告说没有找到该函数。
通常,这种情况下,为了消除这个警告,我们会很郁闷地(为了代码整洁)跑到前面声明下,使用旧版本Xcode往往还要临时写一个匿名扩展(新版本Xcode自动生成);或者(无所谓地)直接把后面的函数定义放到前面。
现在,编译器会先扫描@implementation内的方法,如果存在函数定义,则不出现该警告。
让程序员心情更好,提高生产力有木有!
2. 枚举类型改进
这点对我这种开发者意义不大,不过也更清晰了。
我个人习惯用如下风格定义枚举类型:
清晰地知道起始值和边界值,方便做安全检查。
不过我不清楚枚举值的边界能有多大,当然,一般开发活动中不会有什么问题。
现在,我们可以清楚地知道枚举值的范围,且跨平台:
1
2
3
4
5
6
|
typedef enum _someEnumType : NSUInteger {
kOriginalType = 0,
kYellowType,
kRedType,
kTotalTypeCount
} SomeEnumType; |
如果没有听错的话,这个特性是从C++ 11引进的。
3. 自动合成属性
在之前的Xcode版本,我们在.h文件里声明属性@property后,还需要在.m文件中合成@synthesize,很是麻烦。
现在,我们只需要声明@property name即可,Xcode会自动合成@synthesize name = _name。
这完全符合基本编码风格!所以不需要管其它细节了,照常使用就行。
4. 新增语法特性
通过神奇的@符号,直接简化语法,变身脚本语言!LOL
以前字符串可以这么写:NSString *str = @"Hello";。
现在NSNumber这么写:
1
2
3
4
|
NSNumber *number = @ 'H' ;
number = @1 .2;
number = @YES ;
number = @(60 * 60 * 24);
|
最后一句是表达式封装特性,@( expression ),比如NSString *name = @([self getMyName]);。
数组可以这么写:
1
2
3
|
NSArray *array = @[@ "1" , @ "2" ];
NSString *str = array[0];
NSMutable *mutableArray = [@[@ "1" ] mutableCopy];
|
字典可以这么写:
1
2
|
NSDictionary *dict = @{@ "name" : @ "Jason" , @ "password" : @ "Hello,world" };
NSString *name = dict[@ "name" ];
|
上述写法多简洁啊!让coder从冗长的语法中脱离出来。
【更新:上面有两行代码(下标取值),我没测试就想当然自己添加上去了,编译不过请见SO】
编译器为我们做了些事情(代码片段摘自WWDC 2012 Session 405):
1
2
3
4
5
6
7
8
9
|
// when you write this: dict = @{ k1 : o1, k2 : o2, k3 : o3 }; // compiler generates: id objects[] = { o1, o2, o3 };
id keys[] = { k1, k2, k3 };
NSUInteger count = sizeof (objects) / sizeof ( id );
dict = [ NSDictionarydictionaryWithObjects :objects
forKeys:keys
count:count];
|
我们也可以在自定义对象中添加如下方法来支持下标取值特性:
1
2
3
4
5
6
|
- ( id )objectAtIndexedSubscript:( NSUInteger )idx {
return container[idx];
} - ( void )setObject:( id )obj atIndexedSubscript:( NSUInteger )idx {
container[idx] = obj;
} |
不过,这种语法仍然不支持常量容器。关于compile-time c*****tant,这里有一份讨论。
对此,我们可以采用类方法initialize(代码片段摘自WWDC 2012 Session 405):
1
2
3
4
5
6
7
8
9
10
11
|
@implementation MyClass
static NSArray *thePlanets;
+ ( void )initialize {
if ( self == [MyClass class ]) {
thePlanets = @[
@ "Mercury" , @ "Venus" , @ "Earth" ,
@ "Mars" , @ "Jupiter" , @ "Saturn" ,
@ "Uranus" , @ "Neptune"
];
}
} |
关于initialize类方法,这里有一份讨论,这里有一份说明,包括为何要判断self类型——因为子类没有实现该方法的话,子类收到消息会转发给父类。
为什么放在initialize类方法中就可以呢?
而字典是没有常量一说的,即不存在常量字典。
为什么?
5. End
更详细请看:http://clang.llvm.org/docs/ObjectiveCLiterals.html
发表评论
-
统计xcode代码行数
2013-02-01 17:48 831如果要统计ios开发代码,包括头文件的,终端命令进入项目目 ... -
如何使用AV Foundation从摄像头将视频帧捕获为图像
2012-11-15 17:21 7455如果译错,感谢指出。 英文原文地址:https://d ... -
iOS单元测试
2012-11-05 11:37 920转自:http://www.cnblogs.com/ke ... -
Core Data数据持久化的使用
2012-10-30 21:31 1048CoreData 是ios中用来对数据做持久化的一个框架 ... -
ASIHTTPRequest缓存策略的设置
2012-10-30 17:23 3874ASIHTTPRequest 是一款强大的网络请求框架,该框架 ... -
【无限互联】mac系统读写NTFS
2012-10-23 20:37 932简单几个命令 sudo mv /sbin/mou ... -
【无限互联】xcode自定义类的模板
2012-10-23 19:37 1156翻译:http://www.bobmccune.com/ ... -
【无限互联】适配iOS6和iPhone5屏幕
2012-10-23 18:05 24751. iOS6的mo模拟器比较大,通过comman ... -
【无限互联】mac下配置svn服务器
2012-10-22 13:30 770在mac下配置svn服务器其实很简单,只需要简单的几句命令就可 ... -
【无限互联】iOS开发之多线程开发
2012-10-10 17:41 1236本节要点: 1.多线程的概念 2.掌握iOS中多线程 ... -
【无限互联】iOS开发block用法之UIAlertView控件的修改
2012-10-10 17:06 2686原始的UIAlertView的需要通过委托方法来实现按钮 ... -
iphone-NSDate日期处理
2012-08-31 16:25 1067NSDate存储的是世界标准时(UTC),输出时需要 ... -
iphone开发资源汇总
2012-08-31 16:16 1607如何用Facebook graphic api上传视 ... -
iOS-如何让xcode自动检查内存泄露
2012-08-31 16:05 1097在project-setting中找到 “Run Static ... -
UIScrollView的属性总结
2012-02-08 15:58 4433在滚动过程当中,其实是在修改原点坐标 当手指触摸后, scr ... -
iPhone开发之 ARC是什么
2012-01-17 16:58 1381相关链接:http://blog.csdn ... -
画图时 自己做的一小笔记
2012-01-07 21:02 9610 CGContextRef context = UIGra ... -
让Xcode 4.2生成的app支持旧版iOS设备(armv6)
2012-01-07 00:46 1337这几天遇到一个非常奇怪的问题,基于Xcode 4.2开发的ap ... -
5个开源库的JSON解析速度测试
2011-12-03 23:15 1459iOS5新增了JSON解析的API ... -
获取iOS设备当前ip地址
2011-11-17 23:16 1388第一种方法是用系统api的方式获取,如下 #include & ...
相关推荐
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...
1. Objective-C版本:文中提到了Objective-C11,这是指Objective-C语言的一个版本,随着编程语言的不断更新,版本号会有所变化,但通常指的是支持最新特性的Objective-C语言。 2. HelloWorld程序:这是任何编程语言...
Objective-C是在C语言基础上扩展的,引入了Smalltalk的面向对象特性,如消息传递机制,使得代码更加灵活和可扩展。 "第二讲 数据类型、运算符和表达式"深入讲解了基本的数据类型,包括整型、浮点型、字符型等,以及...
7. **属性声明**:解释了如何声明和使用属性,特别是Objective-C 2.0中引入的新特性。 #### 运行时系统的版本和平台 Objective-C运行时系统有两个主要版本:早期版本和现行版本。 - **早期版本**:该版本主要用于...
接下来,您可以开始探索Objective-C的各种特性和功能,逐步深入学习和开发iOS应用程序了。希望这份指南能够帮助您顺利入门,祝您学习进步! 总结来说,在Windows系统下搭建Objective-C开发环境虽然不像在Mac OS X上...
书中还可能涵盖Block(代码块)的使用,这是Objective-C中一种强大的语法特性,常用于多线程和异步编程,因为它可以捕获和封装变量的上下文。另外,可能会讲解到Cocoa Touch和Cocoa框架中的线程安全类和方法,以及...
适合人群:对面向对象编程和iOS/macOS开发感兴趣的开发人员,尤其是希望深入了解Objective-C语言特性的程序员。 使用场景及目标:帮助开发者理解和掌握Objective-C的基本概念和高级特性,提高他们在苹果生态系统的...
Objective-C是基于C语言的,主要用于构建iOS和macOS应用程序,而Objective-C++则是Objective-C的一个扩展,它引入了C++的特性,使得开发者可以同时利用Objective-C的动态特性和C++的面向对象编程能力。 ### ...
4. **Objective-C 2.0新特性**:第六版可能会涵盖Objective-C 2.0引入的一些新特性,如垃圾回收、属性(properties)和块(blocks)等,这些都是现代Objective-C编程不可或缺的部分。 5. **内存管理**:Objective-C...
在掌握了这些C语言基础知识后,你将更好地理解和学习Objective-C,因为Objective-C是在C语言的基础上扩展的面向对象编程语言,它保留了C的大部分语法,并引入了类、消息传递等面向对象特性。因此,牢固的C语言基础...
3. **Objective-C语法**:深入解析Objective-C的语法特性,如消息传递、方法定义、属性声明、类别(Category)和协议(Protocol)等,以及如何使用这些特性编写代码。 4. **Foundation框架**:介绍Objective-C开发...
Objective-C语法的基石是C语言的语法结构,这意味着所有的C语言代码都可以在Objective-C中直接使用。但是,Objective-C在C的基础上新增了消息传递机制,这是它与C语言的一个重要区别。在Objective-C中,方法调用是...
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,添加了面向对象特性。它的基础包括类、对象、消息传递等概念。类定义了对象的属性和行为,对象则是类的实例。消息传递是Objective-C的核心,通过`...
Objective-C的关键特性包括: 1. **面向对象**:它基于Smalltalk,引入了类、对象、继承、多态等概念。 2. **动态类型**:在Objective-C中,类型信息是在运行时确定的,这使得代码更灵活但可能增加调试难度。 3. **...
Objective-C 2.0带来了许多改进,这本书会深入探讨这些新特性。这可能包括垃圾回收(Garbage Collection)的引入,虽然在现代Xcode中已被 ARC(Automatic Reference Counting)取代,但理解其工作原理仍然有价值。...
Objective-C继承了C语言的基础语法结构,并在此基础上增加了面向对象的特性,包括类(Class)、对象(Object)、消息传递(Message Passing)等概念。具体特点如下: 1. **动态性**: Objective-C是一种动态类型的语言,这...
6. categories:Objective-C的类别机制允许向已存在的类添加新的方法,而无需修改原有代码,这是Objective-C的一个强大特性。 7. blocks:Blocks是Objective-C的匿名函数,可以捕获和存储当前作用域内的变量。它们...
Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...
Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...
Objective-C是C语言的超集,它扩展了C语言,加入了面向对象的特性。面向对象编程(OOP)的核心概念包括类、对象、继承、封装和多态。Objective-C通过消息传递机制实现了这些概念,使得代码更加模块化和可维护。 2....