0

我有一个关于如何最好地管理数组指针以确保不会发生内存泄漏的问题。我有一个容器类 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]
4

1 回答 1

1

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

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

方案 1

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

方案 2

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

于 2013-06-18T18:55:14.880 回答