?
? ? ? ??在iOS設計Category中,默認不能直接添加屬性,如果分類中通過property修飾的屬性,只會生成setter和getter的聲明,
不會生成其實現;因此,如果一定要添加屬性的話,需要借助runtime特性,通過?objc_setAssociatedObject(self, &valueKey, value, OBJC_ASSOCIATION_COPY_NONATOMIC)設置值,由objc_getAssociatedObject(self, &valueKey)函數獲取值。
? ?具體實現如下:
? ? ?NSObject+Extension.h中
? ? // ?在分類中,默認通過property修飾的屬性,只會生成setter和getter的聲明,不會生成其實現
? ??@property (nonatomic, copy) NSString *value;
? ?
? ?NSObject+Extension.m中
??#import "NSObject+Extension.h"
? #import <objc/runtime.h>
?
@implementation NSObject (Extension)
? ?static char valueKey; // 關聯屬性值的key
- (void)setValue:(NSString *)value
{
? ? // 將某個值 跟 某個對象關聯起來
? ? // 將某個值 存儲到 某個對象中
? ? objc_setAssociatedObject(self, &valueKey, value, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
?
- (NSString *)value
{
? ? ?// 通過valueKey取value值
? ? return objc_getAssociatedObject(self, &valueKey);
}
@end?
?
測試..........................................................................
- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? NSString *str = @"jack";
? ? str.value = @"abc";?
? ? self.value = @"哈哈哈";
? ??NSLog(@"%@,%@ ", str.value, self.value);
?
}
運行結果:
2015-06-10 17:07:27.488?運行時的應用-分類增加屬性[1698:63864] abc?哈哈哈
?