首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >retain将在RAM中分配内存?

retain将在RAM中分配内存?
EN

Stack Overflow用户
提问于 2009-10-21 15:39:22
回答 2查看 377关注 0票数 0

接下来将在RAM中分配内存...?

NSArray *obj = [[NSArray arrayWithObjects:@"Hai",@"iHow",

代码语言:javascript
复制
                     nil] retain];
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-21 15:42:24

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

它可能值得补充,它不是“保留”语句来分配内存,内存是由arrayWithObject方法分配的。retain语句简单地递增该对象的引用计数。

票数 6
EN

Stack Overflow用户

发布于 2009-10-21 17:36:43

为了补充Tom的正确答案,下面这行代码:

代码语言:javascript
复制
[NSArray arrayWithObjects: ...]

等同于:

代码语言:javascript
复制
[[[NSArray alloc] initWithObjects:...] autorelease]

因此,您可以这样做,而不是将retain附加到第一行:

代码语言:javascript
复制
[[NSArray alloc] initWithObjects:...]

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1599298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档