На первый взгляд это часто сбивает с толку, когда вы используете методы получения / установки и когда вы обращаетесь к ивуру напрямую.
Альтернативой является имя ивара, отличное от свойства. Обычный подход заключается в использовании подчеркивания для префикса имен ivars, например так:
@interface RootViewController : UITableViewController
{
NSDate *_timestamp;
}
@property (nonatomic, retain) NSDate *timestamp;
Чтобы подключить свойство (имя которого не изменилось), оператор sythensize получает дополнительную опцию:
@implementation RootViewController
@synthesize timestamp = _timestamp;
По сути, если программист ObjectiveC объявляет ivars в соответствии с этим соглашением (и они должны это делать) и использует базовый синтаксис @synthesize _window;
, тогда использование свойства становится несколько уродливым: classInstance._window = myWindow
или [classInstance set_window:myWindow]
. Использование синтаксиса @synthesize window=_window;
позволяет программисту Obj-C использовать популярный стандарт программирования (предшествующий ivars с _
), одновременно имея средства доступа к свойствам, которые используют стандарты Apple classInstance.window = myWindow
и [classInstance setWindow:myWindow]
.