让Category支持添加属性与成员变量
2013-08-29 15:45
330 查看
Category是Objective-C中常用的语法特性,通过它可以很方便的为已有的类来添加函数。但是Category不允许为已有的类添加新的属性或者成员变量。
一种常见的办法是通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成属性。
上面是头文件声明,下面的实现的.m文件:
这个和Category无关,但是也是runtime.h的一种应用。DLIntrospection,是 一个NSObject Category。它为NSObject提供了一系列扩展函数:
通过这些函数,你可以在调试时(通过po命令)或者运行时获得对象的各种信息。
一种常见的办法是通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成属性。
//NSObject+IndieBandName.h @interface NSObject (IndieBandName) @property (nonatomic, strong) NSString *indieBandName; @end
上面是头文件声明,下面的实现的.m文件:
// NSObject+IndieBandName.m #import "NSObject+Extension.h" #import <objc/runtime.h> static const void *IndieBandNameKey = &IndieBandNameKey; @implementation NSObject (IndieBandName) @dynamic indieBandName; - (NSString *)indieBandName { return objc_getAssociatedObject(self, IndieBandNameKey); } - (void)setIndieBandName:(NSString *)indieBandName{ objc_setAssociatedObject(self, IndieBandNameKey, indieBandName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end
DLIntrospection
这个和Category无关,但是也是runtime.h的一种应用。DLIntrospection,是 一个NSObject Category。它为NSObject提供了一系列扩展函数:@interface NSObject (DLIntrospection) + (NSArray *)classes; + (NSArray *)properties; + (NSArray *)instanceVariables; + (NSArray *)classMethods; + (NSArray *)instanceMethods; + (NSArray *)protocols; + (NSDictionary *)descriptionForProtocol:(Protocol *)proto; + (NSString *)parentClassHierarchy; @end
通过这些函数,你可以在调试时(通过po命令)或者运行时获得对象的各种信息。
相关文章推荐
- 让Category支持添加属性与成员变量
- 让Category支持添加属性与成员变量【转载】
- 让Category支持添加属性与成员变量
- 让Category支持添加属性与成员变量
- 日常笔记之一 -- 让Category支持添加属性与成员变量
- 让Category支持添加属性与成员变量
- 让Category支持添加属性与成员变量
- 让Category支持添加属性与成员变量【转载】
- Category支持添加属性与成员变量
- iOS Category中添加属性和成员变量的区别
- 关于iOS Category实现添加属性及成员变量
- Category支持添加成员变量
- Category添加属性与成员变量
- iOS中动态添加属性的方法——关联(e.g. 向Category添加成员变量)
- ios类别(category)不能添加成员变量但是可以添加属性的问题
- 【原】iOS动态性(一):动态添加属性的方法——关联(e.g. 向Category添加成员变量)
- 为category添加属性和成员变量
- iOS类别(category)不能添加成员变量但是可以添加属性的问题
- 59.通过 runtime为Category添加属性与成员变量
- [Objective-C] 通过匿名category给category添加成员变量