2012-09-06 39 views
0

我使用setViewControllers上navigationcontroller像:UINavigation setViewControllers:內存分配

XYZController *xyz = [XYZController alloc] initWithXibName:@"XYZController"]; 
[myNavController setViewControllers:xyz]; 
[xyz release]; 

我檢查儀器的撥款,但是我發現,很多時候這個函數調用儀器增加活動的對象,如果這個功能在#live中被稱爲5次時間樂器演出5次。

這意味着它正在分配內存,我該如何處理內存分配。


編輯

RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
[rootController.navigationController.navigationBar setHidden:YES]; 
[self.myNavController setViewControllers:nil]; 
[self.myNavController setViewControllers:[NSArray arrayWithObjects:navController,nil]]; 
[rootController release]; 
[navController release]; 

這是我用我的應用程序的實際代碼。這裏的問題是,只要有一個這段代碼的調用,rootController中的生命對象計數總是會增加。不僅rootController數量增加,而且類變量也不會釋放,因此內存堆積如山。結果是我的應用程序的性能在很大程度上降低了。

請指教。

回答

0

首先,儀器通常會在查看內存分配時提供誤報,因此我會用一點鹽來提供這些警告。它不應該作爲(除了你的代碼中的錯誤)安裝起來,它對我來說看起來相當有效。

其次,你的代碼是不正確的myNavController(我假設是UINavigationController)調用setViewControllers時,它預計UIViewController的,而不是你有以上的單一視圖控制器陣列會崩潰。這很可能會崩潰,甚至不會編譯。

檢查您的代碼是否有效並再次運行儀器。如果你仍然有同樣的問題,這可能只是一個誤報,應該忽略。

+0

感謝您的快速回復。 'myNavController'是'UINavigationController','setViewControllers'只包含單個視圖控制器。 – parilogic

0

確保您不在(NSZombiesEnabled參數或方案診斷程序中)使用殭屍測試內存使用情況。默認情況下,殭屍永遠不會被刪除。