技术开发 频道

iPhone开发:Objective-C语法入门

  属性Properties

  前面我们写caption和author的accessors的时候,你可以已经注意到了代码非常简明,应该可以被抽象提取出来。

  属性在Objective-C里是一个新的功能。他可以让我们自动的生成accessors,另外还有一些别的优点。我们可以把上面Photo的类转成用属性来实现:

  上面那个类原先的实现是这样:

  #import

  @interface Photo : NSObject {

  NSString
* caption;

  NSString
* photographer;

  }

  
- (NSString*) caption;

  
- (NSString*) photographer;

  
- (void) setCaption: (NSString*)input;

  
- (void) setPhotographer: (NSString*)input;

  @
end

 

  假如用属性来实现就是这样:

  #import

  @interface Photo : NSObject {

  NSString
* caption;

  NSString
* photographer;

  }

  @
property (retain) NSString* caption;

  @
property (retain) NSString* photographer;

  @
end

 

  @property是Objective-C来声明属性的编译指令。括号里面的"retain"指明了setter需要retain输入的对象。这行其他的部分指定了属性的类型以及名字。

  下面让我们来看看这个类的实现:

  #import "Photo.h"

  @implementation Photo

  @synthesize caption;

  @synthesize photographer;

  
- (void) dealloc

  {

  [caption release];

  [photographer release];

  [super dealloc];

  }

  @
end

 

  @synthesize指令自动的生成了我们的setters和getters。所以我们只需要实现类的dealloc方法。

  Accessors只有当他们原先没有的时候,才会被生成。所以可以放心大胆的去用@synthesize来指定属性。而且可以随意实现你自己的getter和setter。编译器会自己去找哪个方法没有。

  属性声明还有别的选项,但是限于篇幅层次,我们下次再介绍。

0
相关文章