Об именовании переменной экземпляра в Objective C

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

В SomeViewController.h,

//....
@property (nonatomic, retain) NSObject *variable;
//....

В SomeViewController.m,

//....
@synthesize variable = _variable;
//....

Но зачем беспокоиться об этом дополнительном усилие, если переменная экземпляра будет неявно названа _variable, даже если мы просто выразим ее как:

@synthesize variable;

в SomeViewController.m.

Может ли кто-нибудь поделиться идеей о том, почему это необходимо? Спасибо: D

Ответ 1

Просто, чтобы избежать путаницы (см. комментарии): Использование = _variable части @synthesize не требуется, а также не требуется @synthesize.

Это усилие требуется только тогда, когда вы хотите связать свойство с определенной переменной экземпляра. С более ранними версиями Objective-C эта часть инструкции требовалась, чтобы установить имя в нечто отличное от имени свойства, поэтому, когда вы хотите вызвать iVar _variable и свойство variable. По умолчанию будет variable (в отличие от вашего вопроса). Без этого = something ivar и свойство имеют одно и то же имя.

Кстати, нет ничего плохого в том, чтобы использовать одно и то же имя для обоих. Но имея разные имена, ведущий _, сделает более понятным для программиста, будет ли он или она напрямую обращаться к ivar или хотя бы к способам доступа. Иногда это имеет огромное значение, особенно когда не используется ARC. Поэтому он помогает избежать ошибок.

С текущим Objective-C, однако, вы можете вообще опустить оператор @synthesize и пойти в этом случае по умолчанию. По умолчанию автоматически синтезированное имя экземпляра variable будет иметь ведущий _, поэтому _variable в вашем примере.