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

看板MacDev作者 (狗狗)時間15年前 (2010/05/02 20:56), 編輯推噓0(007)
留言7則, 3人參與, 最新討論串1/3 (看更多)
在不使用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

05/02 21:02, , 1F
我記得之前似乎有討論過 不過一時找不到...
05/02 21:02, 1F

05/03 11:12, , 2F
如果是兩邊互相參照,通常某一邊是 delegate
05/03 11:12, 2F

05/03 11:12, , 3F
delegate 用 assign,不要用 retain
05/03 11:12, 3F

05/03 20:30, , 4F
因為這兩個物件都是用array的ivar去保留該指標...
05/03 20:30, 4F

05/03 20:32, , 5F
所以必然會互相retain... 如果array放物件時不會retain
05/03 20:32, 5F

05/03 20:32, , 6F
那就比較容易解決了... Orz
05/03 20:32, 6F

05/04 22:11, , 7F
可以查一下memory那doc的weak reference看看
05/04 22:11, 7F
文章代碼(AID): #1BtNPmk2 (MacDev)
文章代碼(AID): #1BtNPmk2 (MacDev)