【问题标题】:How Retain cycles occurs in Memory Management?内存管理中如何发生保留周期?
【发布时间】:2011-03-14 06:40:22
【问题描述】:

有人可以用示例程序解释保留周期问题吗?

【问题讨论】:

标签: iphone memory-management


【解决方案1】:
【解决方案2】:

考虑以下几点:

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 并包含对弱引用的解释,这有助于解决这些问题。

【讨论】:

  • 您好 Georg Fritzche,感谢您提供的精彩示例。我读了你提到的弱参考。对于上面提供的示例,您如何实现弱引用?
  • @Krishnan:您可以使用不使用强引用的不同容器。对于CFMutableArray(可免费桥接到NSMutableArray),您可以将retainrelease 函数设置为NULL - 请参阅here。这样你就得到了一个弱引用数组。
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 2020-03-22
  • 2011-06-27
  • 1970-01-01
  • 2013-08-08
  • 2012-09-19
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多