1. 程式人生 > >利用類別(Category)為物件新增”例項變數”

利用類別(Category)為物件新增”例項變數”

轉自: http://pimacun.72pines.com/2011/06/17/利用類別category為物件新增例項變數/

屬性擴充套件用objc_setAssociatedObject,objc_getAssociatedObject, 方法擴充套件用category

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

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

好了,現在直接寫怎麼做了.

1.在定義類別之前, 引入runtime.

#import <objc/runtime.h>

2.定義&實現類別(以UIView為例)
定義:

@interface UIView(AddVariables)

@property (nonatomic, retain) NSString *viewName;

@end

實現:

// 定義存取的Key
static 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下載