有些人可以解释一个示例程序的保留周期问题吗?内存管理中如何保留周期?
回答
考虑以下几点:
NSMutableArray *a = [NSMutableArray array];
NSMutableArray *b = [NSMutableArray array];
[a addObject:b];
[b addObject:a];
b
时插入a
,b
被保留,同样a
当其插入到b
。由于两者现在都有强对照,所以都不会被解除分配,除非您通过例如手动中断循环。从另一个中取出一个。
请注意,可可内存管理指南还包含a section on retain cycles,并包含对弱引用的解释,这有助于解决这些问题。
嗨Georg Fritzche, 感谢您的美好例子。我读了你提到的弱引用。你如何在上面提供的例子中实现弱引用? – Krishnan 2010-07-13 04:27:55
@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
我有只适合你的文章(S):
http://cocoawithlove.com/2010/06/assign-retain-copy-pitfalls-in-obj-c.html
http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
http://www.markj.net/iphone-memory-management-tutorial-video/
- 1. 内存管理问题与保留
- 2. 保留/分配内存管理
- 3. 在ARC中保留周期
- 4. 存储器管理保留
- 5. UIView如何防止保留周期?
- 6. 如何在处理NSArray(默认保留对象)时避免保留周期?
- 7. 会导致保留周期
- 8. 递归块保留周期
- 9. ARC,块和保留周期
- 10. 保留周期:“Parent-Child”
- 11. 通过AFNetworking保留周期
- 12. 保留周期关注
- 13. Cocos2d代表保留周期
- 14. 代表并保留周期?
- 15. iOS ARC块保留周期
- 16. 块,自我,保留周期
- 17. 会有保留周期吗?
- 18. xcode保留周期不显示在内存图
- 19. 如何处理核心数据保留周期
- 20. Java和内存管理中的对象生命周期?
- 21. Django管理员 - 如何保存内联?
- 22. 适当的内存管理处理NSMutableArray保留属性
- 23. 在其他函数中保留count = 0?内存管理问题?
- 24. 如何在Django保存后保留过滤器选择管理
- 25. 没有保留周期,但为什么仍然有保留周期警告?
- 26. 在AFNetworking成功块中保留周期
- 27. 保留周期中关闭涉嫌
- 28. Android活动生命周期和jni内存管理
- 29. UIButton内存管理 - 如何管理它?
- 30. Lucene.NET生命周期管理
相似问题: [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