Цель c утечка памяти в документации Apple? - PullRequest
0 голосов
/ 09 ноября 2010

Я только изучаю Цель C, так что я, вероятно, что-то упускаю, но приведенный ниже код - это утечка, верно?

Взято из документов Apple :

- (NSString*) title {
    return [[title retain] autorelease];
}

- (void) setTitle: (NSString*) newTitle {
    if (title != newTitle) {
        [title release];
        title = [newTitle retain]; // Or copy, depending on your needs.
    }
}

Получатель сохраняет и автоматически выпускает (удаляя друг друга), но установщик также сохраняет.Это останавливает счетчик ссылок от достижения 0, верно?Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Что вам не хватает (потому что это не показано в примере), так это то, что будет release для всех сохраненных свойств в методе dealloc объекта.

0 голосов
/ 09 ноября 2010

Ах, если бы я читал дальше в документации, Apple объясняет:

Поскольку объект, возвращаемый из средства доступа get, автоматически высвобождается в текущей области, он остается действительным, если значение свойства изменяется

retain / autorelease полезен, когда сеттер вызывается после геттера, так как сеттер освобождает старое значение.

...