retain会在RAM中分配内存吗?

sen*_*thu 0 iphone objective-c

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

NSArray*obj = [[NSArray arrayWithObjects:@"Hai",@"​​iHow",
nil] retain];

Tom*_*rys 6

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

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


inv*_*ame 5

要添加到汤姆的正确答案,行:

[NSArray arrayWithObjects: ...]
Run Code Online (Sandbox Code Playgroud)

相当于:

[[[NSArray alloc] initWithObjects:...] autorelease]
Run Code Online (Sandbox Code Playgroud)

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

[[NSArray alloc] initWithObjects:...]
Run Code Online (Sandbox Code Playgroud)

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