2011-06-19 43 views
2

我想讓我的頭在下面。內存分配/取消分配UIViewController.view

我正在調試一個似乎需要更多內存的應用程序。我添加以下代碼以「撞擊測試」一個的ViewController:

NSLog(@"allocating 10000 instances of the MyViewController"); 
for (int i=0; i<10000; i++) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    MyViewController *aController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
    if (aController.view == nil) {} 
    [aController release]; 
    [pool drain]; 
} 
NSLog(@"done allocating 10000 instances of MyViewController"); 

當我運行在儀器上面的代碼/分配,它的內存使用所有分配/爲約5 MB進入循環前。循環運行後大約24 Mb。

如果我禁用行if (aController.view == nil) {}行運行相同的代碼,內存不會顯着增加。

UIViewController自動調用loadView()因爲我使用aController.view。所以我可以理解mem使用量的臨時增加。但是當我在控制器上調用release時,是否應該不會釋放內存?或者分配的內存(並且在中列出的活動字節數爲)只能在低內存條件下實際獲得釋放?

+2

這聽起來像你的控制器/視圖可能有泄漏。你忘了在'-dealloc'中設置一些IBOutlet爲零嗎? –

+0

是的,他們都被佔了。我有4個,每個都在'dealloc'中按如下方式發佈:'[myButton release],myButton = nil' – user601632

+0

如果「聽起來可能有泄漏」,你應該檢查它是否真的存在。用儀器運行你的測試程序(有一個「泄漏」儀器)可以告訴你是否真的有泄漏。 – jtbandes

回答

0

消息[viewController view]加載視圖(何時/如果需要)。