arrayWithObjects和initWithObjects有什么区别?

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

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

arrayWithObjects是“便利的构造函数”。

它会做:

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

为你。

这只是一个方便的方法来获得自动释放对象,同时提高语句的可读性。 请记住,该对象是自动释放的事实是一个简单的惯例(不是一个规则,所以你可以做不同的事情,但我不会build议)。

arrayWithObject返回一个自动释放的数组,所以当你不再需要它的时候,你不必担心释放它(但是如果你把它存储在一个实例variables中,你应该保留它以防止autorelease池释放它)。 initWithObject返回一个保留数为1的数组,即你拥有这个数组,并且你必须在某个时候释放它来防止内存泄漏。

您可能需要阅读本指南以获得更多的说明。

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