作者leondemon (狗狗)
看板MacDev
標題[問題] 記憶體管理:當兩物件互相參考時...
時間Sun May 2 20:56:13 2010
在不使用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就成了記憶體內的孤兒....
這個情況通常會怎麼解決?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 116.59.127.151
→ leondemon:我記得之前似乎有討論過 不過一時找不到... 05/02 21:02
→ zonble:如果是兩邊互相參照,通常某一邊是 delegate 05/03 11:12
→ zonble:delegate 用 assign,不要用 retain 05/03 11:12
→ leondemon:因為這兩個物件都是用array的ivar去保留該指標... 05/03 20:30
→ leondemon:所以必然會互相retain... 如果array放物件時不會retain 05/03 20:32
→ leondemon:那就比較容易解決了... Orz 05/03 20:32
→ raxcat:可以查一下memory那doc的weak reference看看 05/04 22:11