Распределение памяти / освобождение UIViewController.view - PullRequest
2 голосов
/ 19 июня 2011

Я пытаюсь обдумать следующее.

Я отлаживаю приложение, которое требует больше памяти, чем необходимо. Я добавил следующий код в '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 на контроллере? Или память, выделенная (и перечисленная в живых байтах ) для представления, фактически освобождается только при условии нехватки памяти?

1 Ответ

0 голосов
/ 08 октября 2011

обмен сообщениями [viewController view] загружает представление (когда / если необходимо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...