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
時,是否應該不會釋放內存?或者分配的內存(並且在中列出的活動字節數爲)只能在低內存條件下實際獲得釋放?
這聽起來像你的控制器/視圖可能有泄漏。你忘了在'-dealloc'中設置一些IBOutlet爲零嗎? –
是的,他們都被佔了。我有4個,每個都在'dealloc'中按如下方式發佈:'[myButton release],myButton = nil' – user601632
如果「聽起來可能有泄漏」,你應該檢查它是否真的存在。用儀器運行你的測試程序(有一個「泄漏」儀器)可以告訴你是否真的有泄漏。 – jtbandes