类的实现
我们通过实现getters来创建一个类的实现:
- #import "Photo.h"
- @implementation Photo
- - (NSString*) caption {
- return caption;
- }
- - (NSString*) photographer {
- return photographer;
- }
- @end
这部分的代码由@implementation再来加上类名开始,以@end结束。就跟类的接口定义一样,所有的方法跟接口定义里的一样。所有的对象都必要既要定义也要实现。
假如我们以前也写过代码的话,Objective-C里面的getters看上去跟别的差不多。所以我们下面就来介绍setters,它需要一点说明。
- - (void) setCaption: (NSString*)input
- {
- [caption autorelease];
- caption = [input retain];
- }
- - (void) setPhotographer: (NSString*)input
- {
- [photographer autorelease];
- photographer = [input retain];
- }
每个setter处理两个变量。第一个是当前存在对象的应用。第二个是新的输入对象。在支持垃圾回收的开发环境里,我们只要直接赋新值就可以了:
- - (void) setCaption: (NSString*)input { /× (NSString*)input 表示参数 ×/
- caption = input;
- }
但是假如我们不可以用垃圾回收机制的话,我们就需要先retain旧的对象,然后retain新的对象。
有两种方法可以释放一个引用对象:release 和 autorelease。标准的release会直接删除引用。autorelease方法会在将来的某个时候去release它。在它声明周期结束前,它会毫无疑问的存在。在本例中,上面setPhotographer中的photographer对象,将会在函数结束的时候被释放。
在setter里面用autorelease是安全的,因为新对象跟老的对象有可能是同一个对象有可能指向的是同一个对象。对于一个我们即将retain的对象,我们不应该立即release它。
这个也许现在看起来会困惑,但是随着我们的学习,会越来越能理解它。现在我们不需要立刻完全理解它。