object-c 类簇 category
来源:互联网 发布:淘宝助手官网 编辑:程序博客网 时间:2024/06/06 06:38
http://disanji.net/category/iphone-doc/
Objective-C使用Category
CategoryCocoaiOSiOS入门Objective-c
Category是ObjC语言中的扩展机制之一,另一个为Protocol。
Category提供一种为某个类添加方法而又不必编写子类的途径。
假设有这样一个类CarInfo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <Foundation/Foundation.h>
@interface CarInfo : NSObject {
}
-(void)sayCarBrand;
@end
@implementation CarInfo
-(void) sayCarBrand{
NSLog(@"Car brand: Golf");
}
@end
我可以用Category为该类增加新的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import <Foundation/Foundation.h>
#import "CarInfo.h"
@interface CarInfo(CarInfoCategory)
-(void)sayCarBrandChinese;
@end
@implementation CarInfo(CarInfoCategory)
-(void)sayCarBrandChinese{
NSLog(@"汽车品牌:高尔夫");
}
@end
这里的Category增加了一个新的方法,用来显示汉字名称。可在其他代码中直接调用,就如同调用CarInfo其他实例方法一样:
1
2
CarInfo *carInfo=[[CarInfo alloc] init];
[carInfo sayCarBrandChinese];
这种效果是Java做不到的。这得益于ObjC语言方法调度程序这一特殊机制。
如果方法名称相同会怎样?比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import <Foundation/Foundation.h>
#import "CarInfo.h"
@interface CarInfo(CarInfoCategory)
-(void)sayCarBrand;
@end
@implementation CarInfo(CarInfoCategory)
-(void)sayCarBrand{
NSLog(@"汽车品牌:高尔夫");
}
@end
再次调用:
1
2
CarInfo *carInfo=[[CarInfo alloc] init];
[carInfo sayCarBrand];
会发现,打印的是category中的方法,而不是类的实例方法。因为category优先于类实例方法。
那么是否有这样的能力,比如在category的方法内代码中调用类的实例方法,这样不就可以实现类似Java方法拦截器的功能了么?或者说是方法代理模式。遗憾的是,这样不可以。
原文链接:http://marshal.easymorse.com/archives/4183
转载编辑: Fgamers
转载地址:http://disanji.net/2011/05/17/objective-c-use-category/
- object-c 类簇 category
- object-c 类簇 category
- Object-C中的Category
- object-c的Category
- Object-C中的Category
- object-c学习:类别Category
- object-c category 和 protocol
- Object-C Category(OC分类)
- object-c学习:category 和 protocol区别
- object-c学习:category 和 protocol区别
- Object-C学习笔记-Category(分类)
- object-c学习:category 和 protocol区别
- Object-C中的动态特性(Category类别)
- Object-C Category和Extension的区别
- 【Object-C】类别与扩展Category
- 黑马程序员--Object-C--04--Category
- 黑马程序员06--Object-C--04--Category
- Object-C中Category类体验
- SoInput read with buffer data
- object-c 类簇 category
- 多文档、多模板程序建立新的子框架类后,出现“建立空文档失败”问题的解决办法
- android学习之拖动Button显示效果
- 测试与开发人员的战斗——我不是一个人在战斗
- object-c 类簇 category
- 客户端待办事宜处理机制
- 不一样的毕业致辞
- WP7 Dev 101 【5】 应用程序的能力
- liveforsinging第一篇
- 超级终端使用Xmodem协议传送文件
- 哈夫曼树和哈夫曼编码
- 变量定义和声明(转)
- df 和du 的区别 linux磁盘命令详解