Как удалить UIViewController полностью? - PullRequest
0 голосов
/ 10 декабря 2010
MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ];
[self.view addSubview:viewController.view];

затем я удаляю свой viewController

[self.view removeFromSuperview];

но утечка показывает 20 МБ памяти

Что не так?

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Вы слили объект контроллера вида. После того, как вы удалите представление из его суперпредставления, вам также необходимо освободить контроллер.

В качестве альтернативы вы можете сделать следующее:

[self presentModalViewController:viewController animated:NO];
[viewController release];

Затем, когда вызывается dismissModalViewController, и вид, и контроллер вида будут освобождены должным образом.

0 голосов
/ 10 декабря 2010

Вы позвонили alloc, поэтому вы несете ответственность за его освобождение. Ваш код должен выглядеть так:

MyPlatesViewController* viewController = [[MyPlatesViewController alloc] initWithNibName:@"MyPlates" bundle:nil ];
[self.view addSubview:viewController.view];
[viewController release]

Обратите внимание, что ваш контроллер сохраняется представлением при вызове addSubview и освобождается при вызове removeFromSuperview. Так что в вашем текущем коде счетчик сохранения viewController по-прежнему равен 1 после вызова removeFromSuperview.

Кроме того, вы должны ознакомиться с управлением памятью цель-c здесь: http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

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