Как полностью разгрузить вид контроллера, загруженного из пера? - PullRequest
0 голосов
/ 26 августа 2009

Я пишу приложение для iPhone, которое использует несколько представлений, каждое с собственным контроллером. Они загружаются программно с помощью initWithNibName: и освобождаются перед переключением на другой контроллер, поэтому одновременно виден только один вид. После освобождения контроллера представления (я проверил, что вызывается dealloc) освобождается не вся память. Я освобождаю все розетки при удалении контроллера. Кроме того, установка self.view на nil в dealloc контроллера не решает проблему. Потребление памяти увеличивается, хотя утечки из инструментов не показывают утечек.

Есть ли способ полностью удалить эти виды с их контроллерами из памяти? Я хочу иметь такой же объем свободной памяти до создания нового контроллера и после его удаления.

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

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

Примерно так:

- (id) retain
{
    NSLog(@"Retain: Retain count is now %d", self.retainCount+1);
    return [super retain];
}

- (void) release
{
    NSLog(@"Release: Retain count is now %d", self.retainCount-1);
    [super release];
}

Когда это сказано, я думаю, вы должны проверить, что ваша "утечка памяти" - это не просто что-то, что система кэшировала. Если вы можете последовательно использовать больше памяти, выполняя одну и ту же последовательность снова и снова, то у вас есть утечка.

1 голос
/ 29 августа 2009

Теперь проблема решена, это был UIWebView. Он хранил некоторый кеш, и не было никакого способа очистить его. После замены UIWebView на UIScrollView (он использовался для отображения простой локальной страницы) проблема исчезла.

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