//OBJC_ASSOCIATION_ASSIGN類似于我們常用的assign,assign策略的特點就是在物件釋放以后,不會主動將應用的物件置為nil,這樣會有訪問僵尸物件導致應用崩潰的風險,為了解決這個問題:我們可以創建一個替身物件,以OBJC_ASSOCIATION_RETAIN_NONATOMIC 的策略來強參考替身物件,然后在物件中以weak的策略去參考我們真實需要保護的物件,這樣就能解決這個可能導致崩潰的問題了,
//結論:將OBJC_ASSOCIATION_ASSIGN改為OBJC_ASSOCIATION_RETAIN,這樣在本物件有一個強參考,這個被關聯的物件也就不會被釋放,生命周期也和本物件相同了,我認為既然關聯物件傳入的都是物件,那么其實絕大多時候用的應該是OBJC_ASSOCIATION_RETAIN,在我們專案中傳入的物件很多是NSNumber型別(包裝的bool或則int)的時候都是用的OBJC_ASSOCIATION_ASSIGN,以前沒暴露問題也是誤打誤撞錯進錯出,所以除了一些需要破解回圈參考的場景,關聯物件的記憶體操作修飾符建議都用OBJC_ASSOCIATION_RETAIN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/11406.html
標籤:iOS
上一篇:位域-isa指標
