Category可以在不改变类结构的情况下为已有的类添加方法,但是Category不运行添加属性和成员方法,这可以用<objc/runtime.h>中的 objc_setAssociatedObject(id object, const void *key,id value, objc_AssociationPolicy policy)和id objc_getAssociatedObject(id object,constvoid *key)方法进行对象关联,从而可以通过Category为已有类添加属性和成员变量。
下面通过一个简单的例子来演示怎么通过关联对象来为Category添加属性和成员变量
UIViewController+CustomCategory.h
@interface UIViewController (CustomCategory)
@property (nonatomic, strong) NSString *identifer;
@end
UIViewController+CustomCategory.m
#import "UIViewController+CustomCategory.h"
#import <objc/runtime.h>
static void *identifierKey = @"identiferKey";
@implementation UIViewController (CustomCategory)
- (void)setIdentifer:(NSString *)identifer {
objc_setAssociatedObject(self, identifierKey, identifer, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)identifer {
return objc_getAssociatedObject(self, identifierKey);
}
@end
通过这样UIViewController就会有identifer的属性了。