爲一個類添加一個屬性,除了繼承、類別還有一種重要的方法,對,就是利用我們的RunTime機制。
一、在此之前我們必須要瞭解兩個方法的含義
// 方法一、OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
// 方法二、OBJC_EXPORT id objc_getAssociatedObject(id object, const void *key)
// object:與誰關聯,通常傳self
// key:唯一鍵,在獲取值時通過該鍵獲取,通常使用static const void * 來聲明
// value:關聯所設置的值
// policy:內存管理策略,比如使用copy
// OBJC_ASSOCIATION_ASSIGN = 0, 表示弱引用關聯,通常是基本數據類型,如int、float
//
// OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, 表示強(strong)引用關聯
//
// OBJC_ASSOCIATION_COPY_NONATOMIC = 3,表示關聯對象copy
//
// OBJC_ASSOCIATION_RETAIN = 01401, 表示強(strong)引用關聯對象,線程安全
//
// OBJC_ASSOCIATION_COPY = 01403 表示關聯對象copy 線程安全
二、聰明的你肯定已經發現,這兩個方法就是要在我們的setter、getter方法中實現。
-(void)setIndentifier:(NSString *)indentifier{
objc_setAssociatedObject(self, Indentifier, indentifier, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)indentifier{
return objc_getAssociatedObject(self, Indentifier);
}
代碼傳送門:https://github.com/fuzongjian/RuntimeStudy.git