首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么retainCount返回2

为什么retainCount返回2
EN

Stack Overflow用户
提问于 2013-02-16 16:40:15
回答 3查看 712关注 0票数 1

我有财产:

代码语言:javascript
复制
@property(nonatomic, retain) NSMutableArray *myvar;

第一例:

代码语言:javascript
复制
    myvar = [[NSMutableArray alloc] init];
    NSLog(@retainCount: %i:", [myvar  retainCount]);

产出:

retainCount: 1

第二个案件:

代码语言:javascript
复制
    self.myvar = [[NSMutableArray alloc] init];
    NSLog(@retainCount: %i:", [self.myvar  retainCount]);

产出:

retainCount: 2

我的问题是:为什么在第二种情况下保留值是2?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-16 16:47:54

+1因为你是alloc/init

+1因为self.myvar保留了它(如属性声明中所述)

如果您在autorelease /init之后,它将下降到1.然后,如果将self.myvar设置为零,它将达到0(如果在此期间没有其他任何保留)

但是,正如vikingosegundo所说,你不想弄乱保留计数。操作系统决定何时将其击倒,因此不能将其用作可靠的状态度量。

票数 4
EN

Stack Overflow用户

发布于 2013-02-16 17:31:04

在ARC出现之前,我曾经遵循过这样一条规则:

“NARC规则”:

如果使用NewAllocRetainCopy,则将计数增加1。

在第二种情况下,保留计数为2,因为您在类的实例属性上使用allocretain (通过使用self关键字)。在另一种情况下,您没有使用合成的setter来设置变量,因此也没有使用retain。探索属性对增进理解的实际作用。

vikingosegundo在他的回答中很好地解释了正确的做事方法。

希望这能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2013-02-16 16:44:59

见以下答案:关于保留计数的问题&初始化成员变量

首先,为它分配一个新的NSArray对象。第二,当将对象分配给实例var时,setter会向对象发送保留消息。这会使保留数增加到2。

干杯。

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

https://stackoverflow.com/questions/14912569

复制
相关文章

相似问题

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