Objective-C基础教程学习笔记(十一)特性

Objective-C2.0中引入了特性(property),它组合了新的预编译指令和新的属性访问器语法。新的特性功能显著减少了必须编写的冗长代码的数量。Objective-C的特性只适用于Leopard或更高版本。特性主要应用于Cocoa的新组件(尤其是华丽夺目的Core Animation效果)。

 

@property是一种新的编译器功能,表示声明了一个新对象的属性。

@property float rainHanding;语句表明这是具有float类型的属性,其名称为rainHanding。而且,你可以通过调用-setRainHanding:来设置属性,通过调用-rainHanding来访问属性。@property预编译指令的作用是自动声明属性的setter和getter方法。

接口类代码

@interface AllWeatherRadial {

float rainHanding;

}

@property float rainHanding;

...

实现类代码

@implementation AllWeatherRadial

@synthesize rainHanding;

...

@synthesize 也是一种新的编译器功能,表示“创建该属性的访问器”。当遇到代码@synthesize rainHanding;时,编译器将输出-setRainHanding:和-rainHanding方法的已编译代码。

 

点表达式

[tire setRainHanding:20]; 改成 tire.rainHanding = 20;

Objective-C2.0新特性,如果点表达式出现在等号左边,该属性名称的setter方法将被调用。如果点表达式出现在对象变量右边,则该属性名称的getter方法将被调用。

 

特性扩展

@property (copy) NSString *name;

@property (retain) Engine *engine;

copy声明,编译器和该类的使用者知道name对象将被复制。因为编程人员知道它们不需要复制从文本域获得的字符串。这样可以简化编程人员使用该类的工作。

retain声明,对engine对象的管理只胡保留和释放的操作。

nonatomic声明,如果不在多线程环境中使用,这些声明可以提高访问器方法的调用速度。iphone开发人员经常使用这种技术在资源有限的设备上获得更好的性能。如果不希望保留属性的对象,你可以使用assign方法以避免保留周期问题。

只读属性

默认情况下,特性是可修改的:即可读取又可写入。readwrite声明。

readonly声明,编译器只为该属性生成一个getter方法而不生成settter方法。调用setter方法时,编译器将会报错。

posted @ 2012-10-15 09:07  TQ.CH  阅读(168)  评论(0编辑  收藏  举报