作者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
1F:→ leondemon:我记得之前似乎有讨论过 不过一时找不到... 05/02 21:02
2F:→ zonble:如果是两边互相参照,通常某一边是 delegate 05/03 11:12
3F:→ zonble:delegate 用 assign,不要用 retain 05/03 11:12
4F:→ leondemon:因为这两个物件都是用array的ivar去保留该指标... 05/03 20:30
5F:→ leondemon:所以必然会互相retain... 如果array放物件时不会retain 05/03 20:32
6F:→ leondemon:那就比较容易解决了... Orz 05/03 20:32
7F:→ raxcat:可以查一下memory那doc的weak reference看看 05/04 22:11