Objective-C使用Category
来源:互联网 发布:汽车发动机拼装软件 编辑:程序博客网 时间:2024/05/30 04:32
Category是ObjC语言中的扩展机制之一,另一个为Protocol。
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优先于类实例方法。
那么是否有这样的能力,比如在category的方法内代码中调用类的实例方法,这样不就可以实现类似Java方法拦截器的功能了么?或者说是方法代理模式。遗憾的是,这样不可以。
- Objective-C使用Category
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- objective-c category类别的使用
- <拦截方法> Objective-C使用Category
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- 【iOS】Objective-C之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Objective-C语法之Category的使用
- Category 类别 -Objective-C
- Category 类别 -Objective-C
- Objective-C分类 (category)
- Category 类别 -Objective-C
- Qt中显示中文
- 经典的sql语句
- Windows Phone Marketplace 应用总数突破40,000
- linux网络socket
- asp.net页面关键事件
- Objective-C使用Category
- xml的读取与dwr的实现
- 谁来决定我们的命运
- Websphere Portlet Factoroy 启动服务
- c++builder选择文件,并得到文件路径!OpenDialog Edit!
- vector list map 的区别
- ARM assemble question of interview (one)
- oracle 10g将数据导入到指定表空间的步骤
- 常见的几个NO_SQL数据库