如果我写:
NSArray *arr=[[NSArray alloc]initWithObjects:@"Liza", @"Lipi", @"Rose"];
NSArray *arr=[NSArray arrayWithObjects:@"Liza", @"Lipi", @"Rose"];
这两个语句都会做同样的事情。那么这两个语句之间有什么区别,使用其中一个语句有什么好处呢?
如果我写:
NSArray *arr=[[NSArray alloc]initWithObjects:@"Liza", @"Lipi", @"Rose"];
NSArray *arr=[NSArray arrayWithObjects:@"Liza", @"Lipi", @"Rose"];
这两个语句都会做同样的事情。那么这两个语句之间有什么区别,使用其中一个语句有什么好处呢?
第二个是返回自动释放数组的便捷方法,第一个需要内存管理。在 ARC 下,这些是等效的,并且对于数组文字,两者可能都比您需要的更冗长,请@[@"Liza", @"Lipi", @"Rose"]
改用
在过去...如果您使用第一个,则release
需要arr
.
而第二个释放一个autorelease
d 对象。
现在在 ARC 中,autoreleased 由编译器放置。
好处: arrayWithObjects:
简洁,不需要一个额外的方法调用。
在第一个语句中,您是生成实例的所有者(因此,如果不使用,您也有责任释放它ARC
),而在另一个语句中,您不是(数组为您自动释放)。(在幕后alloc
andinit
由NSArray
实现调用)