Я получаю сообщения об утечке памяти в своем приложении, но я не могу точно определить, что происходит. У меня есть функция, которая выводит старый вид и свопирует в новое представление. Я не использую NavControllers или любые @properties; Я управляю своим окном верхнего уровня напрямую.Отслеживание утечек памяти какао
-(void)swapInView:(UIViewController*)newViewController
{
[currentViewer.view removeFromSuperview];
printf("Old viewController (%p) has count of %d; now releasing\n",
currentViewer, [currentViewer retainCount]);
[currentViewer release];
currentViewer = 0;
currentViewer = newViewController;
[currentViewer retain];
[mainWindow addSubview:currentViewer.view];
[mainWindow bringSubviewToFront:currentViewer.view];
}
При запуске кода, я показываю, что текущий контроллер зрения быть высвобождены, а затем мой метод dealloc для этого вида контроллера вызывался. Но, приборы/утечки все еще сообщают об этом как утечку. Например, я получаю эту распечатку:
Old viewController (0x119f80) has count of 1; now releasing
Deallocating WelcomeScreenViewController
я могу проверить с адреса, что это тот же объект выделяется ранее.
Мой внешний код выглядит примерно так:
MyViewController *theViewController = [[MyViewController alloc]
initWithNibName:nil
bundle:nil];
[GameMaster swapInNewView:theViewController];
[theViewController release];
Кто-нибудь есть какие-либо предложения о том, как отследить, что происходит? Я использую SDK 3.1.2, но я также видел это на более ранних SDK.
Какая конкретная строка говорит о утечке? –
[mainWindow addSubview: currentViewer.view]; –
Итак, кажется, что 'mainWindow' просачивает добавленный под-просмотр. Вы вызываете выпуск на 'mainWindow' в какой-то момент? –