看板 MacDev 關於我們 聯絡資訊
※ 引述《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
uranusjr:你這例子跟原 po 問的不一樣啊... 05/03 14:48
atst2:一樣的,原po用NSMutableArray存物件,一定會有retain的動作 05/03 17:09
atst2:所以A物件的retainCount是3,而非原po說的2. 05/03 17:10
atst2:除非原po將A物件指定給C的時候,沒有遵照retain/release的 05/03 17:11
atst2:規則,做擁有權的管理與轉移,否則根本不應出現他所想問的問題 05/03 17:12