вопрос iPhone относительно управления памятью - PullRequest
1 голос
/ 25 февраля 2009

Вот гипотетический получатель:

- (DetailViewController *)detailController
{

    if (detailController == nil) {
        DetailViewController *controller = [[DetailViewController alloc] initWithNibName:@"Detail" bundle:nil];
        self.detailController = controller;
        [controller release];
    }

    return detailController;
 }

Тогда код, который вызывает его, выглядит примерно так:

- (void)loadControllerOrSomething 
{
   DetailViewcontroller *controller =  self.detailController;
   [navigationController doSomethingWith:controller];
}

Мой вопрос относительно управления памятью следующий. Если я позволю * контроллеру выйти из области видимости здесь, в loadControllerOrSomething, я теряю память? Должен ли я делать контроллер = ноль после работы с navigationController?

1 Ответ

3 голосов
/ 25 февраля 2009

Нет, вы ничего не пропустите.

Не было никакого дополнительного сохранения, добавленного к контроллеру, прежде чем он был возвращен, и никакого сохранения не добавлено, когда это было получено. Если вам нужно гарантировать его существование вне рамок ваших функций, вы должны вызвать retain для него и освободить, когда закончите.

Так обычно работает управление памятью в Какао. Когда объект возвращается функцией, у вас нет прав собственности. Если вы не позвоните «сохранить», он будет удален, когда достигнет конца своего естественного жизненного цикла, который может быть следующим кадром, следующей минутой или около того.

Исключением являются функции с именами, содержащими «alloc» или «copy», которые возвращают новый объект. Вы несете ответственность за вызов релиза, когда он больше не нужен.

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