Object C的Categories

Category提供一种为某个类添加方法而又不必编写子类的途径。

假设有这样一个类CarInfo:

 
 #import <Foundation/Foundation.h>  
 @interface CarInfo : NSObject {   }   
-(void)sayCarBrand;   
@end  
 
 @implementation CarInfo
  -(void) sayCarBrand{ NSLog(@"Car brand: Golf"); }   
 @end 

我可以用Category为该类增加新的方法:

 
 #import <Foundation/Foundation.h> 
 #import "CarInfo.h"   
 
@interface CarInfo(CarInfoCategory)   
 -(void)sayCarBrandChinese;   
 @end       
 
 @implementation CarInfo(CarInfoCategory)   
-(void)sayCarBrandChinese{ NSLog(@"汽车品牌:高尔夫"); }   
 @end 

这里的Category增加了一个新的方法,用来显示汉字名称。可在其他代码中直接调用,就如同调用CarInfo其他实例方法一样:

CarInfo *carInfo=[[CarInfo alloc] init];
 [carInfo sayCarBrandChinese];

这种效果是Java做不到的。这得益于ObjC语言方法调度程序这一特殊机制。

如果方法名称相同会怎样?比如:

 #import <Foundation/Foundation.h> 
#import "CarInfo.h"   
 
@interface CarInfo(CarInfoCategory)  
 -(void)sayCarBrand;   
@end   
 
@implementation CarInfo(CarInfoCategory)   
-(void)sayCarBrand{ NSLog(@"汽车品牌:高尔夫"); }   
@end 

再次调用:

CarInfo *carInfo=[[CarInfo alloc] init]; [carInfo sayCarBrand];

会发现,打印的是category中的方法,而不是类的实例方法。因为category优先于类实例方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值