在objC中initWith vs arrayWith?

时间:2012-11-01 03:16:57

标签: objective-c xcode memory-management collections initialization

使用

创建数组(或使用其各自工厂方法的任何其他集合)的优缺点是什么
[[NSArray alloc] init]

VS

[NSArray array]
目标C中的

?似乎后一种工厂方法允许我们不用担心内存管理,所以我很好奇是否有任何一点使用alloc + init,尽管我现在对这两者之间的所有差异更感兴趣,以及为什么会这样做选择一个而不是另一个。

2 个答案:

答案 0 :(得分:5)

ARC之前有一个关键的区别。 alloc/init案例返回了保留的对象,而array案例则返回了自动释放的对象。

使用ARC,差异并不那么重要。可能第一种情况是头发更有效,但在大多数情况下它们是可以互换的。

答案 1 :(得分:1)

在第一个中,您拥有数组对象的所有权。你必须释放它们。

NSMutableArray* p = [[NSMutableArray alloc] init];

[p release];

&安培;最后一个你不需要发布,因为你没有数组对象的所有权。

NSMutableArray* p = [NSMutableArray]; //this is autoreleased

如果您在此处调用release,那么它将使您的应用程序崩溃。