1

我已经开始将我的项目转换为在 ARC 下工作,我想知道下面的行为会如何。

据我了解,以下行会导致手动内存管理规则下的内存泄漏。

self.array = [[NSArray alloc] init];

并且建议使用自动释放对象,例如,

  self.array = [NSArray array] or
  array = [[NSArray alloc] init]; 
  1. 因此,ARC 模式是否也会导致下一行的内存泄漏?

    self.array = [[NSArray alloc] init];

  2. 当我们直接分配给数组(?)而不使用生成的setter时,这会导致数组过早释放吗?

    array = [[NSArray alloc] init];

请将数组视为实例变量。

4

2 回答 2

3

1)不,不泄漏。
2)不,应该也可以

ARC 的两种方式都是安全的。无论如何,您应该尽可能使用属性。您需要注意的唯一情况是:

如果您的属性很弱并且您分配了一个新创建的对象,例如self.array = [[NSArray alloc] init],它将在下一行中消失。这在 ARC 中有点奇怪。但是如果你的属性很强大,你根本不需要关心内存的东西。

于 2012-11-05T17:30:32.823 回答
1

当您使用 ARC 时,编译器实际上会为您插入正确的保留和释放,因此您不必担心在这些情况下会出现内存泄漏。它有助于从“过渡”指南中阅读一些关于 ARC 的内容:

http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

于 2012-11-05T17:30:42.193 回答