利用类别(Category)为对象添加”实例变量”

来源:互联网 发布:淘宝上如何卖土特产 编辑:程序博客网 时间:2024/04/30 16:42

利用类别(Category)为对象添加”实例变量”

Posted by pimacun on 六 17, 2011 in 开发 |
Subscribe

主要利用ObjectiveC的C API中函数:

void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)id objc_getAssociatedObject(id object, const void *key)

原理详细参见官方的ObjectiveC Runtime Reference.

好了,现在直接写怎么做了.

1.在定义类别之前, 引入runtime.

#import <objc/runtime.h>

2.定义&实现类别(以UIView为例)
定义:

@interface UIView(AddVariables)@property (nonatomic, retain) NSString *viewName;@end

实现:

// 定义存取的Keystatic const char *viewNameKey = "viewNameKey";@implementation UIView(AddVariables)// get方法- (NSString *)viewName {    return (NSString *)objc_getAssociatedObject(self, viewNameKey);}// set方法- (void)setViewName:(NSString *)newViewNameKey {    objc_setAssociatedObject(self, viewNameKey, newViewNameKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}@end

3.调用测试:

- (void)viewDidLoad {    UIView *testView = [[UIView alloc] initWithFrame:self.view.bounds];    [self.view addSubview:testView];    [testView release];    [testView setViewName:@"Nori's View"];    NSLog(@"[testView's newPropery]:%@", testView.viewName);    [super viewDidLoad];}

输出结果如下:

testView's newPropery:Nori's View

工程Demo下载