2010-10-07 52 views
2

我有以下的代码行的程序应该是什么保留计数这里+ iPhone

VisitWebsiteVC *visitWebSite 
     = [[VisitWebsiteVC alloc] initWithNibName:@"VisitWebsiteVC" bundle:nil]; 
NSLog(@"Retain Count :%i",[visitWebSite retainCount]); 
[self.navigationController pushViewController:visitWebSite animated:YES]; 
NSLog(@"Retain Count :%i",[visitWebSite retainCount]); 
[visitWebSite release]; 

在我看到的打印语句

保留计数控制台:1
保留计数:5

我不明白为什么行后,我推我的viewController返回我的viewController retainCount作为5,当它一定是2.

+0

我检查了我的其他班级。有时它会在将viewController设置为8(有时是10)后显示retainCount。我想知道这是否正常或者我的代码有问题。 – tek3 2010-10-07 13:59:34

+1

是的,这是正常的。不要关注幕后的retainCount。 – 2010-10-07 19:09:33

回答

4

你不想依靠任何保留计数。当你推送一个视图控制器时,有各种各样的事情发生在视图控制器后面(视图被实例化,这可能意味着加载一个XIB,还有一堆还没有开启的autorelease调用)。这是检查内存使用情况的一种非常危险的方式。

至于为什么它是5而不是2,正如我前面所说,这很可能与未解决的autorelease池有关。如果您在viewDidAppear中检查retainCount,或者更好的是,在所有初始化调用解决后,它可能更接近于2.

1

当我不知道班级在做什么时,我停止打印retainCount。

也许navigationController在短时间内保留你的控制器多次。

但是:
的Alloc => +1
pushViewController => +1

:-)

1

我相信没有任何问题。多少保留计数增量无关紧要。重要的是,当视图控制器被弹出时,它必须被释放尽可能多的时间,因为它已被保留。