2010-10-07 65 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

我相信沒有任何問題。多少保留計數增量無關緊要。重要的是,當視圖控制器被彈出時,它必須被釋放盡可能多的時間,因爲它已被保留。