先提下category使用
1. 一個分類中可以新增多個方法
2. 分類中不可以新增實例變量
3. 分類中可以訪問原來類中的實例變量
4. @property (nonatomic, copy) NSString *name; 相當(dāng)于聲明了setter getter 方法,需要我們自己實現(xiàn)
給NSObject添加一個name屬性(嚴(yán)格來說是,實現(xiàn)setter getter 方法)
1 .h文件
@interface NSObject (test)
@property (nonatomic, copy) NSString *name;
@end
2 .m文件實現(xiàn)
#import "NSObject+test.h"
#import <objc/runtime.h>
@implementation NSObject (test)
// 定義關(guān)聯(lián)的key
static const char *key = "name";
//getter 方法實現(xiàn)
- (NSString *)name
{
// 根據(jù)關(guān)聯(lián)的key金抡,獲取關(guān)聯(lián)的值。
return objc_getAssociatedObject(self, key);
}
//實現(xiàn)setter方法
- (void)setName:(NSString *)name
{
// 第一個參數(shù):給哪個對象添加關(guān)聯(lián)
// 第二個參數(shù):關(guān)聯(lián)的key,通過這個key獲取
// 第三個參數(shù):關(guān)聯(lián)的value
// 第四個參數(shù):關(guān)聯(lián)的策略
objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end