创建数组(或使用其各自工厂方法的任何其他集合)的优缺点是什么
[[NSArray alloc] init]
对比
[NSArray array]
在目标 C? 似乎后一种工厂方法让我们不必担心内存管理,所以我很好奇使用 alloc + init 是否有任何意义,尽管我现在对这两者之间的所有差异更感兴趣,以及为什么会选择一个而不是另一个。
创建数组(或使用其各自工厂方法的任何其他集合)的优缺点是什么
[[NSArray alloc] init]
对比
[NSArray array]
在目标 C? 似乎后一种工厂方法让我们不必担心内存管理,所以我很好奇使用 alloc + init 是否有任何意义,尽管我现在对这两者之间的所有差异更感兴趣,以及为什么会选择一个而不是另一个。
在 ARC 之前,有一个关键的区别。alloc/init
案例返回一个保留的对象,而array
案例返回一个自动释放的对象。
使用 ARC,差异就不那么重要了。可能第一种情况是头发效率更高,但在大多数情况下它们是可以互换的。
在第一个中,您拥有数组对象的所有权并且您必须释放它们。
NSMutableArray* p = [[NSMutableArray alloc] init];
[p 释放];
& 最后一个你不需要释放,因为你没有数组对象的所有权。
NSMutableArray* p = [NSMutableArray]; //this is autoreleased
如果您在此调用 release,那么它将使您的应用程序崩溃。