自动释放与发布

ker*_*sen 5 memory-management objective-c autorelease

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

1:

NSMutableArray *stuff = [[NSMutableArray alloc] init];
// use the array
[stuff release];
Run Code Online (Sandbox Code Playgroud)

2:

NSMutableArray *stuff = [NSMutableArray array];
// use the array
Run Code Online (Sandbox Code Playgroud)

3:

NSMutableArray *stuff = [[[NSMutableArray alloc] init] autorelease];
// use the array
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*and 10

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

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

3号基本上是2号的冗长等价物,但如果你想使用没有相应arrayWith*的initWith*,它确实会派上用场.

注意:如果你内存不足的,比如在一个昂贵的循环中,你需要为每次迭代提供一个新的数组; 不要释放和分配新数组; 只需使用-removeAllObjects并回收数组.

  • 在iPhone上,您会发现大多数人使用数字1,因为内存会更快地返回到运行时.事实上,Apple建议尽可能避免自动释放(在iPhone上). (2认同)