<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">一般分類(Category)是不允許添加屬性的,只能進行方法的擴展,分類中不會自動生成set和get方法,更不會出現_object這樣的屬性名。運行時能幫我們解決這個問題,自己添加set和get的方法。本文將介紹對象屬性和基本類型屬性兩種運行時代碼的添加。(其實只需要把基本類型轉換爲對象就可以了)</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
都是要在.m文件中添加運行時頭文件的。
#import <objc/runtime.h>
1、對象屬性的添加:
<span style="font-size:24px;">@property(nonatomic,strong)NSString* test;</span>
定義char *類型的標誌符:
static char* testStr = "TESTSTR";
運行時的set和get代碼:
- (void)setTest:(NSString *)test{
objc_setAssociatedObject(self, testStr, test, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)test{
return objc_getAssociatedObject(self, testStr);
}
2、基本類型添加
@property(nonatomic,assign)int weight11;
static char strKey = 'k';
- (int)weight11{
return [objc_getAssociatedObject(self, &strKey) intValue];
}
- (void)setWeight11:(int)weight11{
return objc_setAssociatedObject(self, &strKey, @(weight11), OBJC_ASSOCIATION_ASSIGN);
}
好了,用法就是這樣,至於想了解內部,慢慢來吧。