这篇为Object-C添加方法的后续。
这里我们应该在类的实现(.m)文件中写
#import "Photo.h"
@implementation Photo
- (NSString *)caption
{
return caption;
}
- (NSString *)photographer
{
return photographer;
}
@end
这里@implementation和类的名字(Photo)开始,并且以@end结束,所有的方法必须写在这两条语句之间。
如果你写过代码,就会觉得上面的getter看上去很熟悉,所以再看看setter。
- (void)setCaption:(NSString *)input
{
[caption autorelease];
caption = [input retain];
}
- (void)setPhotographer:(NSString *)input
{
[photographer autorelease];
photographer = [input retain];
}
每一个setter都要处理两个变量,第一个是当前引用的对象,第二个是新输入的对象。在带有垃圾回收机制的环境中,我们可以直接设置成新的值。
例如:
- (void)setCaption:(NSString *)input
{
caption = input;
}
但是,如果你不能使用垃圾回收,你需要release旧的对象,并且retain新的对象。
释放一个对象的引用实际上有两种方法:release 和 autorelease。标准的release 会立刻释放对象的引用,autorelease会等一会儿才释放,但是引用实际上会一直存在,直到当前方法结束(除非你添加自定义的代码来明确得改变它)。
在setter里面使用autorelease方法会更加安全一些,因为要改变的变量的新旧两个值可能指向的是同一个对象。而你可能不希望立刻释放实际上你要保留的对象。看到现在有点让人迷惑,但是随着不断学习,会有更多的认识。所以现在不必彻底的理解这些。