自动释放与发布

时间:2010-11-02 11:27:20

标签: objective-c memory-management autorelease

当我需要一个临时使用的数组时,它们之间的区别是什么:

1:

NSMutableArray *stuff = [[NSMutableArray alloc] init];
// use the array
[stuff release];

2:

NSMutableArray *stuff = [NSMutableArray array];
// use the array

3:

NSMutableArray *stuff = [[[NSMutableArray alloc] init] autorelease];
// use the array

我更喜欢2号,因为它更短。是否有充分的理由使用1号或3号?

1 个答案:

答案 0 :(得分:10)

在大多数情况下,2号可能是最佳选择。

无论出于何种原因,数字1都有可能在某个时候失去释放,但它会立即释放阵列,这在内存不足的环境中可能很有用。

数字3基本上是数字2的详细等价物,但如果你想使用没有相应数组*的initWith *,它确实会派上用场。

注意:如果 内存不足,例如在昂贵的循环中,每次迭代都需要一个新的数组; 发布并分配新数组;只需使用-removeAllObjects并回收数组。