Управление памятью при использовании представлений - PullRequest
1 голос
/ 26 февраля 2011

Я только учусь кодировать для iPhone с помощью Objective-C, и я не совсем понимаю, почему контроллер представления должен быть освобожден, когда он используется?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];

    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Контроллер навигации уже сохранил контроллер детального вида, поэтому в этом месте счетчик сохранения равен 2 Релиз сохранит счет 1.

1 голос
/ 26 февраля 2011

Ниже приведено следующее: позаботьтесь о локальном управлении памятью, не беспокойтесь о необходимости управления памятью классов API. Они управляют своей собственной памятью.

Некоторые вещи, которые нужно запомнить с помощью управления памятью Objective-C:

  • Классы касания какао несут ответственность за сохранение вещей, которые вы им даете. Добавить подпредставление к представлению? Представление сохраняет это самостоятельно. Выдвигаете контроллер вида на контроллер навигации? Контроллер навигации сохраняет контроллер представления до тех пор, пока он не будет извлечен из стека.
  • И наоборот, каждый раз, когда вы вызываете alloc, copy, new и / или keep, должен быть соответствующий выпуск или autorelease. В приведенном выше коде вы вызвали alloc, чтобы сделать свой контроллер представления, предоставив ему счет сохранения 1, который вы ответственны за освобождение в какой-то момент.
  • Если вы используете свойства, которые являются объектами с точечной нотацией, а свойство является свойством копирования или сохранения (обычно того, что вам нужно), не делайте этого:

    self.property = [[WhwhatObject alloc] init];

вместо этого сделайте это:

self.property = [[[WhateverObject alloc] init] autorelease;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...