Я пытаюсь обдумать следующее.
Я отлаживаю приложение, которое требует больше памяти, чем необходимо. Я добавил следующий код в 'crashtest' 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");
Когда я запускаю приведенный выше код в Instruments / Allocations, его использование памяти All Allocations / live составляет около 5 Мб до входа в цикл. Это около 24 Мб после запуска цикла.
Если я запускаю тот же код с отключенной строкой if (aController.view == nil) {}
, память существенно не увеличивается.
UIViewController
автоматически вызывает loadView()
, потому что я использую aController.view
. Так что я могу понять временное увеличение использования памяти. Но разве эта память не должна быть освобождена, когда я вызываю release
на контроллере? Или память, выделенная (и перечисленная в живых байтах ) для представления, фактически освобождается только при условии нехватки памяти?