Objective-C基础语法快速入门(5)

类的实现

我们通过实现getters来创建一个类的实现:

 
 
  1. #import "Photo.h"  
  2.  
  3. @implementation Photo  
  4.  
  5. - (NSString*) caption {  
  6.  
  7. return caption;  
  8.  
  9. }  
  10.  
  11. - (NSString*) photographer {  
  12.  
  13. return photographer;  
  14.  
  15. }  
  16.  
  17. @end  
  18.  

这部分的代码由@implementation再来加上类名开始,以@end结束。就跟类的接口定义一样,所有的方法跟接口定义里的一样。所有的对象都必要既要定义也要实现。

假如我们以前也写过代码的话,Objective-C里面的getters看上去跟别的差不多。所以我们下面就来介绍setters,它需要一点说明。

 
 
  1. - (void) setCaption: (NSString*)input  
  2.  
  3. {  
  4.  
  5. [caption autorelease];  
  6.  
  7. caption = [input retain];  
  8.  
  9. }  
  10.  
  11. - (void) setPhotographer: (NSString*)input  
  12.  
  13. {  
  14.  
  15. [photographer autorelease];  
  16.  
  17. photographer = [input retain];  
  18.  
  19. }  
  20.  

每个setter处理两个变量。第一个是当前存在对象的应用。第二个是新的输入对象。在支持垃圾回收的开发环境里,我们只要直接赋新值就可以了:

 
 
  1. - (void) setCaption: (NSString*)input {  /× (NSString*)input 表示参数 ×/
  2.  
  3. caption = input;  
  4.  
  5. }  
  6.  

但是假如我们不可以用垃圾回收机制的话,我们就需要先retain旧的对象,然后retain新的对象。

有两种方法可以释放一个引用对象:release 和 autorelease。标准的release会直接删除引用。autorelease方法会在将来的某个时候去release它。在它声明周期结束前,它会毫无疑问的存在。在本例中,上面setPhotographer中的photographer对象,将会在函数结束的时候被释放。

在setter里面用autorelease是安全的,因为新对象跟老的对象有可能是同一个对象有可能指向的是同一个对象。对于一个我们即将retain的对象,我们不应该立即release它。

这个也许现在看起来会困惑,但是随着我们的学习,会越来越能理解它。现在我们不需要立刻完全理解它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值