что будет делать переменная @synthesize = _variable? - PullRequest
3 голосов
/ 29 июня 2011

Например, я видел такой код в делегате приложения в проекте iPhone.

что означает переменная с подчеркиванием?Могу ли я использовать его как установщик и получатель для переменной?

также при освобождении переменной следует использовать:

  [variable release]; 

или

 [_variable release]; 

Спасибо.

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

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

@synthesize variable = _variable 

Создает установщик и получатель, которые устанавливают / получают переменную, которую вы задали в этом случае _variable.Поэтому внешний доступ использует код, подобный object.variable, который на самом деле просто возвращает _variable.однако класс обычно использует _variable внутри.

3 голосов
/ 29 июня 2011
@synthesize variable = _variable;

Имя свойства - «переменная», а переменная экземпляра, которая его поддерживает, называется «_variable».Вы должны использовать методы доступа -variable и -setVariable: вместо прямого доступа к ivar, кроме как в -init и -dealloc, где вы будете использовать _variable.

1 голос
/ 29 июня 2011

В вашем примере переменная является свойством, а _variable является переменной экземпляра. Для простоты мы можем сказать, что, синтезируя, вы по сути указываете, что свойство (в нашей переменной case) будет использовать переменную экземпляра (в нашем случае _variable) для хранения и извлечения значений. Что вы действительно делаете, так это инструктируете компилятор создавать реализации, соответствующие спецификации, указанной в объявлении свойства.

Рекомендуемый способ освобождения при использовании свойства - просто присвоить ему ноль. Это, по сути, освободит объект, а также установит переменную экземпляра равной nil вместо того, чтобы быть висящим указателем.

Если вы не использовали свойство, тогда вы можете вызвать релиз для переменной экземпляра, а затем в идеале вы хотите установить его в ноль.

...