3

如果我写:

NSArray *arr=[[NSArray alloc]initWithObjects:@"Liza", @"Lipi", @"Rose"];
NSArray *arr=[NSArray arrayWithObjects:@"Liza", @"Lipi", @"Rose"];

这两个语句都会做同样的事情。那么这两个语句之间有什么区别,使用其中一个语句有什么好处呢?

4

3 回答 3

2

第二个是返回自动释放数组的便捷方法,第一个需要内存管理。在 ARC 下,这些是等效的,并且对于数组文字,两者可能都比您需要的更冗长,请@[@"Liza", @"Lipi", @"Rose"]改用

于 2013-04-14T13:26:39.763 回答
1

在过去...如果您使用第一个,则release需要arr.

而第二个释放一个autoreleased 对象。

现在在 ARC 中,autoreleased 由编译器放置。

好处: arrayWithObjects:简洁,不需要一个额外的方法调用。

于 2013-04-14T13:11:31.403 回答
1

在第一个语句中,您是生成实例的所有者(因此,如果不使用,您也有责任释放它ARC),而在另一个语句中,您不是(数组为您自动释放)。(在幕后allocandinitNSArray实现调用)

于 2013-04-14T13:12:11.723 回答