我已经开始将我的项目转换为在ARC下工作了,我想知道以下内容会如何表现。
据我所知,以下行会导致手动内存管理规则下的内存泄漏。
self.array = [[NSArray alloc] init];
建议使用自动释放对象,例如,
self.array = [NSArray array] or
array = [[NSArray alloc] init];
因此,ARC模式是否也会导致以下行的内存泄漏?
self.array = [[NSArray alloc] init];
当我们在不使用生成的setter的情况下直接分配给数组(?)时,这会导致数组过早释放吗?
array = [[NSArray alloc] init];
请将数组视为实例变量。
答案 0 :(得分:3)
1)不,不泄漏。
2)不,也应该工作
ARC的两种方式都是安全的。无论如何你应该尽可能使用属性。您需要注意的唯一情况如下:
如果您的属性很弱并且您分配了一个新创建的对象,例如self.array = [[NSArray alloc] init]
,它将在下一行中正确显示。 ARC中有点奇怪。
但是如果你的属性很强,你根本不需要关心内存。
答案 1 :(得分:1)
当您使用ARC时,编译器实际上会为您插入适当的保留和释放,因此您不必担心这些情况下的内存泄漏。从“转换”指南中读取ARC有点帮助: