【发布时间】:2011-03-14 06:40:22
【问题描述】:
有人可以用示例程序解释保留周期问题吗?
【问题讨论】:
有人可以用示例程序解释保留周期问题吗?
【问题讨论】:
我为您准备了合适的文章:
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/
【讨论】:
考虑以下几点:
NSMutableArray *a = [NSMutableArray array];
NSMutableArray *b = [NSMutableArray array];
[a addObject:b];
[b addObject:a];
当b插入a时,b被保留,同样a插入b。由于现在两者之间都有一个 strong 引用,因此除非您手动中断循环,否则两者都不会被释放,例如从另一个中删除一个。
请注意,Cocoa 内存管理指南还包含a section on retain cycles 并包含对弱引用的解释,这有助于解决这些问题。
【讨论】:
CFMutableArray(可免费桥接到NSMutableArray),您可以将retain 和release 函数设置为NULL - 请参阅here。这样你就得到了一个弱引用数组。