Re: [問題] 記憶體管理:當兩物件互相參考時...

看板MacDev作者 (atst2)時間14年前 (2010/05/03 11:33), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《leondemon (狗狗)》之銘言: : 在不使用GC前提下 : 當AB兩物件互相參考時 會互相retain對方 : 而造成無法在不使用的時候順利release 而造成memory leak : 例如 A和B都是相同類別 : 它都含有一個instance variable叫做list (為NSMutableArray) : 而A的list中含有B B的List中含有A : 然後C物件含有ref.能夠操作A : 因此這個情況之下A的retainCount為2 B的retainCount為1 : 當C物件進行dealloc時 會releaseA 此時A的retainCount為1 : 結果A和B就成了記憶體內的孤兒.... : 這個情況通常會怎麼解決? B* b = [B new];//count 1 A* a = [A new];//count 1 [A setB:b];// b count 2 [B setA:a];// a count 2 C* c = [C new]; [c setA:a];// a count 3 [c release];//a count 2 [b release]; b count 1, a count 1 [a release]; a count 0, b count 0 結論: retain/release 請成對 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.227.128.237

05/03 14:48, , 1F
你這例子跟原 po 問的不一樣啊...
05/03 14:48, 1F

05/03 17:09, , 2F
一樣的,原po用NSMutableArray存物件,一定會有retain的動作
05/03 17:09, 2F

05/03 17:10, , 3F
所以A物件的retainCount是3,而非原po說的2.
05/03 17:10, 3F

05/03 17:11, , 4F
除非原po將A物件指定給C的時候,沒有遵照retain/release的
05/03 17:11, 4F

05/03 17:12, , 5F
規則,做擁有權的管理與轉移,否則根本不應出現他所想問的問題
05/03 17:12, 5F
文章代碼(AID): #1BtaGT4U (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1BtaGT4U (MacDev)