以下内容将在RAM中分配内存....?
NSArray * obj = [[NSArray arrayWithObjects:
@“海”,@“iHow”,
nil] retain];
答案 0 :(得分:6)
是。它将创建一个NSArray对象并将其存储在堆上。 arrayWithObject方法返回一个自动释放的对象,但是你的额外retain语句确保引用计数至少为1,并且在你明确释放它之前内存不会被释放。
可能值得添加,它不是分配内存的“retain”语句,内存是由arrayWithObject方法分配的。 retain语句只是递增该对象的引用计数。
答案 1 :(得分:5)
要添加汤姆的正确答案,请输入以下行:
[NSArray arrayWithObjects: ...]
相当于:
[[[NSArray alloc] initWithObjects:...] autorelease]
所以,不要在第一行添加retain
,而是可以这样做:
[[NSArray alloc] initWithObjects:...]
在任何情况下,内存都在alloc
中分配,无论该方法是出现在您的代码中还是隐式的(因为它是在自动释放类方法的方便调用中,如第一个)。