利用類別(Category)為物件新增”例項變數”
阿新 • • 發佈:2019-02-03
轉自: 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下載