iOS 給分類添加屬性關(guān)聯(lián)對象

分類里添加屬性冈钦,僅僅是生成了set和get方法的聲明,并沒有實現(xiàn)劫樟,需要我們自己寫set和get的方法。

幾種set,get方法實現(xiàn)案例

1.可以全局字典實現(xiàn)屬性的存取

//聲明全局的字典

NSMutableDictionary *_names_;

//load方法實現(xiàn)字典

+ (void)load

{

?? _ names_ = [NSMutableDictionary dictionary];

}

//實現(xiàn)set方法

-(void)setName:(NSstring *)name

{

?? NSString *key = [NSString stringWithFormat:@"%p", self];

? ? names_[MJKey] = name;

}

//實現(xiàn)get方法

- (NSString *)name

{

//? ? NSString *key = [NSString stringWithFormat:@"%p", self];

? ? return names_[MJKey];

}

存在的問題:

全局變量無法釋放?

如果每個類在不不同的線程蛋勺,同時訪問set和get,如果不不加鎖鸠删,可能會出現(xiàn)問題

2.關(guān)聯(lián)對象

- (void)setName:(NSString *)name

{

? ? objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);

}

- (NSString *)name

{

? ? // 隱式參數(shù)

? ? // _cmd == @selector(name)

? ? return objc_getAssociatedObject(self, _cmd);

}

第四個參數(shù)為關(guān)聯(lián)策略抱完,和變量的對應(yīng)關(guān)系


關(guān)聯(lián)策略,參數(shù)4

第二個參數(shù)key


參數(shù)2可以多樣化

第一種方法利用字符串作為key,其中利用@"string",這樣寫的字符串是放在常量區(qū)的冶共,無論哪里用到都是同一內(nèi)存同一地址乾蛤,但是這樣寫容易寫錯每界,且編譯器沒有提醒

更推薦第二種寫法,不容易記錯其中@selector(name),_cmd_,是函數(shù)的隱式參數(shù)

實現(xiàn)關(guān)聯(lián)對象技術(shù)的核心對象

AssociationsManager

AssociationsHashMap

ObjectAssociationMap

ObjectAssociation


源碼解讀

其中AssociationsManager類管理了一個全局的散列表家卖,key是添加管理屬性的對象眨层,value是ObjectAssociationMap的散列表,其中key是第二個參數(shù)上荡,value是ObjectAssociation類趴樱,ObjectAssociation其中包含有value和policy,也就是我們傳入的第三和第四個參數(shù)


全局數(shù)據(jù)結(jié)構(gòu)

關(guān)聯(lián)對象并不是存儲在被關(guān)聯(lián)對象本身的內(nèi)存中

關(guān)聯(lián)對象存儲在全局的同一的AssociationsManager中

設(shè)置關(guān)聯(lián)對象為nil,相當于移出關(guān)聯(lián)對象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪捡,一起剝皮案震驚了整個濱河市叁征,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逛薇,老刑警劉巖捺疼,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異永罚,居然都是意外死亡啤呼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門呢袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來官扣,“玉大人,你說我怎么就攤上這事羞福√杼悖” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵治专,是天一觀的道長卖陵。 經(jīng)常有香客問我,道長张峰,這世上最難降的妖魔是什么赶促? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮挟炬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗦哆。我一直安慰自己谤祖,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布老速。 她就那樣靜靜地躺著粥喜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橘券。 梳的紋絲不亂的頭發(fā)上额湘,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天卿吐,我揣著相機與錄音,去河邊找鬼锋华。 笑死嗡官,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的毯焕。 我是一名探鬼主播衍腥,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纳猫!你這毒婦竟也來了婆咸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤芜辕,失蹤者是張志新(化名)和其女友劉穎尚骄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侵续,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡倔丈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了询兴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乃沙。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诗舰,靈堂內(nèi)的尸體忽然破棺而出警儒,到底是詐尸還是另有隱情,我是刑警寧澤眶根,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蜀铲,位于F島的核電站,受9級特大地震影響属百,放射性物質(zhì)發(fā)生泄漏记劝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一族扰、第九天 我趴在偏房一處隱蔽的房頂上張望厌丑。 院中可真熱鬧,春花似錦渔呵、人聲如沸怒竿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耕驰。三九已至,卻和暖如春录豺,著一層夾襖步出監(jiān)牢的瞬間朦肘,已是汗流浹背饭弓。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留媒抠,地道東北人弟断。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像领舰,于是被迫代替她去往敵國和親夫嗓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 關(guān)聯(lián) 關(guān)聯(lián)是指把兩個對象相互關(guān)聯(lián)起來,使得其中的一個對象作為另外一個對象的一部分锉桑。 關(guān)聯(lián)特性只有在Mac OS ...
    玩簡書閱讀 1,015評論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔排霉,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • 2019.8.24 事業(yè)民轴,做售后攻柠,后來發(fā)現(xiàn)把產(chǎn)品展現(xiàn)賣點還真是挺難的,有太多細節(jié)的東西需要處理后裸,以及跟美工溝通等瑰钮,...
    小小丸子戈閱讀 110評論 0 0
  • 這天,在男朋友多次的督促和鼓勵下微驶,我開始加入簡書浪谴,似乎感覺自己想寫的內(nèi)容很多,有爸爸媽媽的支持因苹,有男朋友的陪伴苟耻,有...
    追夢的F小姐閱讀 250評論 1 3