Xcode 中对类进行Category
2015-12-12 11:37
465 查看
Category 类别:
创建方式: 选择objective-C
File,里面FileType可以选择Empty File,Category,Protocol和Extension
Category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。
#import
@interface NSObject (Category)
- (void)myMethod;
@end
这是一个最简单的Category,作用于NSObject类,给NSObject添加了一个方法。
使用Category需要注意的点:
(1) Category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃。
(2) Category理论上不能添加变量,但是可以使用@dynamic 来弥补这种不足。 (即运行时Runtime)
#import
static const void * externVariableKey =&externVariableKey;
@implementation NSObject (Category)
@dynamic variable;
- (id) variable
{
return objc_getAssociatedObject(self, externVariableKey);
}
- (void)setVariable:(id) variable
{
objc_setAssociatedObject(self, externVariableKey, variable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
创建方式: 选择objective-C
File,里面FileType可以选择Empty File,Category,Protocol和Extension
Category在iOS开发中使用非常频繁。尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。
#import
@interface NSObject (Category)
- (void)myMethod;
@end
这是一个最简单的Category,作用于NSObject类,给NSObject添加了一个方法。
使用Category需要注意的点:
(1) Category的方法不一定非要在@implementation中实现,也可以在其他位置实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃。
(2) Category理论上不能添加变量,但是可以使用@dynamic 来弥补这种不足。 (即运行时Runtime)
#import
static const void * externVariableKey =&externVariableKey;
@implementation NSObject (Category)
@dynamic variable;
- (id) variable
{
return objc_getAssociatedObject(self, externVariableKey);
}
- (void)setVariable:(id) variable
{
objc_setAssociatedObject(self, externVariableKey, variable, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
相关文章推荐
- HDU 4982 Goffi and Squary Partition(推理)
- 【Django 】Django开发
- Mac lion与windows7共享文件的问题
- Codeforces Round #335 (Div. 2) D. Lazy Student
- googlecode 上的dao-hibernate 使用
- Got error: 1449: The user specified as a definer ('root'@'%') does not exist
- Google的可用Hosts文件
- Django静态文件配置
- 获取Google Play 下载 来源渠道 广告参数 相关数据
- 从Google Play 【谷歌商店】直接下载软件到电脑
- category 分类
- Pedro domingos
- google地图项目总结
- Category和Extension
- golang的ssh例子
- 在云平台上基于Go语言+Google图表API提供二维码生成应用
- [Golang]OS系统调用浅析
- Golang和Erlang消息传递机制对比
- Golang和Erlang的IO调度浅析
- Golang和Erlang的并发调度浅析