作者atst2 (atst2)
看板MacDev
标题Re: [问题] 记忆体管理:当两物件互相参考时...
时间Mon May 3 11:33:46 2010
※ 引述《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
1F:→ uranusjr:你这例子跟原 po 问的不一样啊... 05/03 14:48
2F:→ atst2:一样的,原po用NSMutableArray存物件,一定会有retain的动作 05/03 17:09
3F:→ atst2:所以A物件的retainCount是3,而非原po说的2. 05/03 17:10
4F:→ atst2:除非原po将A物件指定给C的时候,没有遵照retain/release的 05/03 17:11
5F:→ atst2:规则,做拥有权的管理与转移,否则根本不应出现他所想问的问题 05/03 17:12