RunTime機制詳解(二)

爲一個類添加一個屬性,除了繼承、類別還有一種重要的方法,對,就是利用我們的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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章