освобождение и перераспределение viewController? - PullRequest
0 голосов
/ 22 августа 2010

У меня есть viewController, который добавляется к текущему представлению следующим образом:

theDetail = [[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
[self.view addSubview:theDetail.view];

Теперь - когда пользователь закрывает это новое представление, я удаляю его из суперпредставления.

Пользователь может нажать кнопку, чтобы показать это представление дважды, хотя.Но когда я это делаю, detailController выделяется во второй раз, и я получаю счет удержания два.

Когда я сначала освобождаю detailView, я получаю ошибку при втором щелчке ...

Кто-нибудь, кто может показать мне правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 22 августа 2010

Я нашел решение - думаю, я ДЕЙСТВИТЕЛЬНО должен прочитать главу об управлении памятью снова (и снова) ...

Хитрость заключалась в том, чтобы изменить выделенную строку следующим образом:

self.theDetail = [[[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]] autorelease];

Это обменивает текущий набор «theDetail» на новый, автоматически освобождая старый (как ясно сказано в документации - тот, кто умеет читать, имеет явное преимущество:)

0 голосов
/ 22 августа 2010

Я бы также предложил использовать контроллер навигации.

Однако - если вы уверены, что хотите это сделать, я бы предложил сохранить theDetail в качестве общеклассовой переменной, а затем использовать что-то вродеследующее:

if (theDetail == nil) {
    theDetail = [[detailController alloc]  initWithNibName:@"detail" bundle:[NSBundle mainBundle]];
    [self.view addSubview:theDetail.view];
}
0 голосов
/ 22 августа 2010

Почему вы не используете контроллер навигации для загрузки вида?

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