arrayWithObjects和initWithObjects的区别是什么?

7
您能否为我解释这两行代码之间的确切区别?
NSArray *foo = [NSArray arrayWithObjects:@"hai",@"how",@"are",@"you",nil];
NSArray *bar = [[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil];
3个回答

17

arrayWithObjects 是"便利构造器"。

它将会执行:

return [[[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil] autorelease]

这只是一种方便的方法,可以在提高语句可读性的同时获取一个自动释放的对象。请记住,对象自动释放只是语言的惯例(而不是规则),因此您可以采用不同的方式,但我不建议这样做。


请将ininWithObject更改为initWithObject。很抱歉这么说,因为其他人没有收到任何错误提示。 - Thukaram

8
arrayWithObject方法返回的是一个自动释放的数组,所以你不必在不需要它时释放它(但如果你将它存储在实例变量中,应该保留它以防止自动释放池释放它)。initWithObject方法返回一个具有1个保留计数的数组,即您拥有该数组并且必须在某个时刻释放它以防止内存泄漏。
您可能需要阅读此指南以获得更多解释:链接

2

你拥有第二个数组,但不拥有第一个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接