arrayWithObjects和initWithObjects有什么区别?

时间:2011-07-19 08:46:07

标签: objective-c ios memory-management

你能解释一下这两行之间的确切区别吗?

NSArray *foo = [NSArray arrayWithObjects:@"hai",@"how",@"are",@"you",nil];
NSArray *bar = [[NSArray alloc] initWithObjects:@"hai",@"how",@"are",@"you",nil];

3 个答案:

答案 0 :(得分:17)

arrayWithObjects是“便利构造函数”。

它会:

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

给你。

在提高语句的可读性的同时获取自动释放的对象只是一种方便的方法。请记住,对象是自动释放的这一事实是一种简单的语言约定(不是规则,所以你可以做不同的事情,但我不建议这样做。)

答案 1 :(得分:8)

arrayWithObject返回一个自动释放的数组,因此您不必担心在不再需要它时将其释放(但如果将其存储在实例变量中,则应保留它以防止自动释放池从解放它)。 initWithObject返回一个保留计数为1的数组,即您拥有该数组,并且必须在某个时刻释放它以防止内存泄漏。

您可能需要阅读this guide以获得更多说明。

答案 2 :(得分:2)

您拥有第二个数组但不拥有第一个数组。