Выпуск иваров в Objective-C - PullRequest
       7

Выпуск иваров в Objective-C

2 голосов
/ 29 апреля 2011

ОК, глядя на это:

Apple Docs: объявленные свойства

Если вы прокрутите вниз до Deloc, он будет читать:

В методе dealloc вы должны освобождать переменные экземпляра объекта напрямую (вместо того, чтобы вызывать метод доступа set и передавать nil в качестве параметра), как показано в этом примере: "

- (void)dealloc {
    [property release];
    [super dealloc];
}

" Если вы используете современную среду выполненияОднако, синтезируя переменную экземпляра, вы не можете получить доступ к переменной экземпляра напрямую, поэтому вы должны вызвать метод доступа: "

- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

Теперь я должен владеть по крайней мере 15-20 книгами по разработке для iOS.Я не могу сказать, что когда-либо видел в этих книгах какой-либо код, предлагающий что-либо сделать, кроме:

[someproperty release];

Есть ли веская причина для редактирования группы файлов кода, которая прекрасно работает дляпринять рекомендацию Apple?Как насчет будущей работы?Или они в значительной степени эквивалентны?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Документ Apple, кажется, применяется только в том случае, если у вас включен синтез по умолчанию. Если он отключен, что, по-видимому, является случаем по умолчанию, вам нужен @synthesize, который дает вам доступ к переменным напрямую.

Лично я делаю:

@synthesize someProperty=_someProperty;

только тогда я смогу сделать:

- (void)dealloc {
  [_someProperty release];
  [super dealloc];
}

См. блог Джеффа Ламарша для получения дополнительной информации.

1 голос
/ 29 апреля 2011

В современной среде выполнения вам больше не нужно объявлять переменные экземпляра для свойств, а также не нужно писать @synthesize в реализации. Если в вашем коде уже объявлены переменные экземпляра, то нет смысла заменять код, который вызывает release, вызовом метода доступа set (первая вставленная вами цитата даже утверждает, что).

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