在ARC模式下初始化变量

时间:2012-11-05 17:26:32

标签: iphone objective-c ios cocoa

我已经开始将我的项目转换为在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];

  3. 请将数组视为实例变量。

2 个答案:

答案 0 :(得分:3)

1)不,不泄漏。
2)不,也应该工作

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

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

答案 1 :(得分:1)

当您使用ARC时,编译器实际上会为您插入适当的保留和释放,因此您不必担心这些情况下的内存泄漏。从“转换”指南中读取ARC有点帮助:

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