runtime--实现篇02(Category增加属性)
?
? ? ? ??在iOS設(shè)計Category中,默認(rèn)不能直接添加屬性,如果分類中通過property修飾的屬性,只會生成setter和getter的聲明,
不會生成其實現(xiàn);因此,如果一定要添加屬性的話,需要借助runtime特性,通過?objc_setAssociatedObject(self, &valueKey, value, OBJC_ASSOCIATION_COPY_NONATOMIC)設(shè)置值,由objc_getAssociatedObject(self, &valueKey)函數(shù)獲取值。
? ?具體實現(xiàn)如下:
? ? ?NSObject+Extension.h中
? ? // ?在分類中,默認(rèn)通過property修飾的屬性,只會生成setter和getter的聲明,不會生成其實現(xiàn)
? ??@property (nonatomic, copy) NSString *value;
? ?
? ?NSObject+Extension.m中
??#import "NSObject+Extension.h"
? #import <objc/runtime.h>
?
@implementation NSObject (Extension)
? ?static char valueKey; // 關(guān)聯(lián)屬性值的key
- (void)setValue:(NSString *)value
{
? ? // 將某個值 跟 某個對象關(guān)聯(lián)起來
? ? // 將某個值 存儲到 某個對象中
? ? 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);
?
}
運(yùn)行結(jié)果:
2015-06-10 17:07:27.488?運(yùn)行時的應(yīng)用-分類增加屬性[1698:63864] abc?哈哈哈
?
轉(zhuǎn)載于:https://www.cnblogs.com/guozhong/p/4566773.html
總結(jié)
以上是生活随笔為你收集整理的runtime--实现篇02(Category增加属性)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交通银行好享贷怎么取消?取消好享贷看这里
- 下一篇: opencv 直方图反向投影