2010-07-10 19 views
0

有些人可以解释一个示例程序的保留周期问题吗?内存管理中如何保留周期?

+0

相似问题: [http://stackoverflow.com/questions/791322/retain-cycles-why-is-that-such-a-bad-thing](http://stackoverflow.com/questions/791322/retain-cycles-why-that-such-a-bad-thing) – 2010-07-10 15:16:06

回答

3

考虑以下几点:

NSMutableArray *a = [NSMutableArray array]; 
NSMutableArray *b = [NSMutableArray array]; 
[a addObject:b]; 
[b addObject:a]; 

b时插入ab被保留,同样a当其插入到b。由于两者现在都有强对照,所以都不会被解除分配,除非您通过例如手动中断循环。从另一个中取出一个。

请注意,可可内存管理指南还包含a section on retain cycles,并包含对弱引用的解释,这有助于解决这些问题。

+0

嗨Georg Fritzche, 感谢您的美好例子。我读了你提到的弱引用。你如何在上面提供的例子中实现弱引用? – Krishnan 2010-07-13 04:27:55

+0

@Krishnan:您可以使用不使用强引用的不同容器。对于'CFMutableArray'(免费桥接到'NSMutableArray'),你可以将'retain'和'release'函数设置为'NULL' - 参见[here](http://developer.apple.com/mac/)库/文档/的CoreFoundation /参考/ CFArrayRef /参考/#的reference.html // apple_ref/DOC/c_ref/CFArrayCallBacks)。这样你会得到一个弱引用数组。 – 2010-07-13 13:54:22