2010-11-02 107 views
5

当我需要临时使用数组,什么是它们之间的区别:自动释放与释放

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?

回答

10

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

1号机有可能因某种原因在某一点失去释放,但它确实释放了数组立即,这在内存不足的环境中可能是有用的。

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

注:如果存储器饥饿,如昂贵的循环在需要针对每次迭代新鲜阵列; 不要发布并分配新阵列;只需使用-removeAllObjects并回收数组。

+0

谢谢!关于第1号内存立即释放的好处。 – keronsen 2010-11-02 12:42:01

+2

在iPhone上,您会发现大多数人都使用第一号,因为内存会很快返回到运行时。事实上,苹果建议尽可能避免自动释放(在iPhone上)。 – JeremyP 2010-11-02 14:32:02

+1

好的答案,保存最后一位。我敢打赌,在每次传递中创建新数组和删除所有对象之间的区别是不可估量的,很有可能,删除所有对象的速度将会微不足道。在任何情况下,直到您遇到量化的性能问题时才进行优化。 – bbum 2010-11-02 17:53:44