освободить возвращенный объект или я должен использовать autorelease - PullRequest
0 голосов
/ 26 октября 2011

пример кода:

- (Foo*)createFoo {
    Foo *foo = [[Foo alloc] init];
    return foo;
}

- (void)someOtherMethod {
    Foo *foo;
    foo = [self createFoo]; //retain count 1
    [foo release]; //retain count = 0 => object gets released?

    //repeat
    foo = [self createFoo];
    [foo release];
}

Qeuration (может быть, глупый): мне нужно автоматически выпустить в createFoo или я могу освободить возвращенный объект в someOtherMethod?

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

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

Чтение Основные правила управления памятью .Если вы будете придерживаться этих правил, с вами все будет в порядке.

0 голосов
/ 26 октября 2011

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

Помните NARC - предполагается, что методы, начинающиеся с этих ключевых слов, НЕ являются авто-релизами ...

New, Alloc, Retain, Copy

Если ваш метод был назван newFoo или copyFooтогда ваш код выше будет в порядке без автоматического освобождения.

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