【问题标题】:IOS - memory management pointersIOS - 内存管理指针
【发布时间】:2013-06-15 01:58:18
【问题描述】:

我有一个关于如何最好地管理数组指针以确保不会发生内存泄漏的问题。我有一个容器类 A 和一个复合类 B。两者都有一个数组属性,并且都对数组做自己的事情。但是容器是唯一暴露给公共 API 的类。所以我设置了 classA.someProperty,它在内部设置了 classB.someProperty,如下所示。我需要做什么样的清理工作? ARC 会自动为我解决这个问题吗?

class A

 @property(nonatomic,strong) NSMutableArray* someProperty;
 @property(nonatomic,strong) ClassB* classB;


Class B

 @property(nonatomic,strong) NSMutableArray someProperty;

在A类的实现中;

classB.someProperty = [self.someProperty mutableCopy]
//do some other work with self.someProperty

and in the implementation in Class B;
//do some work with self.someProperty [Includes modifications to the array]

【问题讨论】:

  • 如果将- dealloc中的所有strong属性设置为nil,应该没问题。这就是计数的参考点。
  • 您确定要在 dealloc 中将属性设置为 nil - stackoverflow.com/questions/7906804/…
  • 无意冒犯你,但是你有没有推荐在使用 ARC 时在 dealloc 中将所有强属性设置为 nil 的参考资料?
  • @H2CO3 您绝对没有来实现 dealloc,据我所知,您也不必在 ARC 下设置 nil 属性。你从哪里得到的?
  • 不需要实现dealloc。来自 Apple 的文档:“如果您需要管理资源而不是释放实例变量,则可以实现一个 dealloc 方法。” (developer.apple.com/library/ios/ipad/#releasenotes/ObjectiveC/…) - 他们也没有说必须 nil 属性(非 ARC 代表除外)

标签: ios objective-c


【解决方案1】:

您无需编写任何清理代码,ARC 会负责释放内存。 ARC 将自动将代码减少定义为强属性的变量的引用计数。

我建议您考虑变量的引用计数来理解内存管理。 ARC 将自动插入语句以在适当的位置减少引用计数。让我们为您的示例考虑两种情况:

场景 1

没有其他类有引用类 A 的 someVariable 的变量:当类 A 的引用计数变为 0 时,您可以确定 ARC 已将代码使 someVariable 的引用计数为 0(在类 A 的 dealloc 中)。

场景 2

另一个引用 A 类的 someVariable 的变量(比如在 C 类中)然后 someVariable 的引用计数仍将减少(由 ARC 插入的代码),但它不会为零,因此不会被释放(并且这就是你想要的,因为你想在 C 类中访问它)。

【讨论】:

  • 感谢您确认我的直觉,在这种情况下我不需要任何清理代码。
猜你喜欢
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多