我有财产:
@property(nonatomic, retain) NSMutableArray *myvar;第一例:
myvar = [[NSMutableArray alloc] init];
NSLog(@retainCount: %i:", [myvar retainCount]);产出:
retainCount: 1
第二个案件:
self.myvar = [[NSMutableArray alloc] init];
NSLog(@retainCount: %i:", [self.myvar retainCount]);产出:
retainCount: 2
我的问题是:为什么在第二种情况下保留值是2?
发布于 2013-02-16 16:47:54
+1因为你是alloc/init的
+1因为self.myvar保留了它(如属性声明中所述)
如果您在autorelease /init之后,它将下降到1.然后,如果将self.myvar设置为零,它将达到0(如果在此期间没有其他任何保留)
但是,正如vikingosegundo所说,你不想弄乱保留计数。操作系统决定何时将其击倒,因此不能将其用作可靠的状态度量。
发布于 2013-02-16 17:31:04
在ARC出现之前,我曾经遵循过这样一条规则:
“NARC规则”:
如果使用New、Alloc、Retain或Copy,则将计数增加1。
在第二种情况下,保留计数为2,因为您在类的实例属性上使用alloc和retain (通过使用self关键字)。在另一种情况下,您没有使用合成的setter来设置变量,因此也没有使用retain。探索属性对增进理解的实际作用。
vikingosegundo在他的回答中很好地解释了正确的做事方法。
希望这能帮上忙!
发布于 2013-02-16 16:44:59
https://stackoverflow.com/questions/14912569
复制相似问题