黑马程序员-iOS基础-Objective-C基础(八)

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

属性Properties

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

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

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

 
 
  1. #import  
  2.  
  3. @interface Photo : NSObject {  
  4.  
  5. NSString* caption;  
  6.  
  7. NSString* photographer;  
  8.  
  9. }  
  10.  
  11. - (NSString*) caption;  
  12.  
  13. - (NSString*) photographer;  
  14.  
  15. - (void) setCaption: (NSString*)input;  
  16.  
  17. - (void) setPhotographer: (NSString*)input;  
  18.  
  19. @end  
  20.  

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

 
 
  1. #import  
  2.  
  3. @interface Photo : NSObject {  
  4.  
  5. NSString* caption;  
  6.  
  7. NSString* photographer;  
  8.  
  9. }  
  10.  
  11. @property (retain) NSString* caption;  
  12.  
  13. @property (retain) NSString* photographer;  
  14.  
  15. @end  
  16.  

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

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

 
 
  1. #import "Photo.h"  
  2.  
  3. @implementation Photo  
  4.  
  5. @synthesize caption;  
  6.  
  7. @synthesize photographer;  
  8.  
  9. - (void) dealloc  
  10.  
  11. {  
  12.  
  13. [caption release];  
  14.  
  15. [photographer release];  
  16.  
  17. [super dealloc];  
  18.  
  19. }  
  20.  
  21. @end  
  22.  

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

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

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

Logging

在Objective-C里,往console写日记非常简单。事实上NSLog()跟C语言的printf()两个函数几乎完全相同,除了NSLog是用额外的“%@”去获得对象。

 
 
  1. NSLog ( @"The current date and time is: %@", [NSDate date] );  
  2.  

我们可以log一个对象到console里去。NSLog函数调用要输出对象的description方法,然后打印返回的NSString。我们可以在自己的类里重写description方法,这样我们就可以得到一个自定义的字符串。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值