當(dāng)使用系統(tǒng)類(lèi)的時(shí)候如果需要添加一個(gè)屬性 可以選擇新建立一個(gè)類(lèi)繼承該系統(tǒng)類(lèi)在新建類(lèi)中添加屬性,和使用擴(kuò)展類(lèi)。
例如:當(dāng)前使用UIViewController的擴(kuò)展類(lèi),為其添加一個(gè)類(lèi)型為NSString的對(duì)象 對(duì)象名為test;
@property(nonatomic,copy)NSString *test;
通過(guò)objc_setAssociatedObject在其set方法中將該屬性關(guān)聯(lián)到該類(lèi)
-(void)setTest:(NSString *)test{
objc_setAssociatedObject(self, @selector(test), test, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
void objc_setAssociatedObject(id object, const void *key, id value, objc _AssociationPolicy policy)
object:與誰(shuí)關(guān)聯(lián),通常是傳self
key:唯一鍵,在獲取值時(shí)通過(guò)該鍵獲取,通常是使用static
const void *來(lái)聲明
value:關(guān)聯(lián)所設(shè)置的值
policy:內(nèi)存管理策略,比如使用copy
通過(guò)objc_getAssociatedObject在該屬性的get方法中得到其值
-(NSString *)test
{
return objc_getAssociatedObject(self, @selector(test));
}
id objc_getAssociatedObject(id object, const void *key)
object:與誰(shuí)關(guān)聯(lián),通常是傳self,在設(shè)置關(guān)聯(lián)時(shí)所指定的與哪個(gè)對(duì)象關(guān)聯(lián)的那個(gè)對(duì)象
key:唯一鍵,在設(shè)置關(guān)聯(lián)時(shí)所指定的鍵