retain会在RAM中分配内存吗?

时间:2009-10-21 07:39:22

标签: iphone objective-c

以下内容将在RAM中分配内存....?

NSArray * obj = [[NSArray arrayWithObjects:                         @“海”,@“iHow”,
                        nil] retain];

2 个答案:

答案 0 :(得分:6)

是。它将创建一个NSArray对象并将其存储在堆上。 arrayWithObject方法返回一个自动释放的对象,但是你的额外retain语句确保引用计数至少为1,并且在你明确释放它之前内存不会被释放。

可能值得添加,它不是分配内存的“retain”语句,内存是由arrayWithObject方法分配的。 retain语句只是递增该对象的引用计数。

答案 1 :(得分:5)

要添加汤姆的正确答案,请输入以下行:

[NSArray arrayWithObjects: ...]

相当于:

[[[NSArray alloc] initWithObjects:...] autorelease]

所以,不要在第一行添加retain,而是可以这样做:

[[NSArray alloc] initWithObjects:...]

在任何情况下,内存都在alloc中分配,无论该方法是出现在您的代码中还是隐式的(因为它是在自动释放类方法的方便调用中,如第一个)。