В Objective-C что означает код после @synthesize?

Извините за плохой заголовок, я не знал, как еще назвать этот вопрос. В любом случае, предположим, что у меня есть следующее:

@synthesize display = _display

Мой вопрос: в чем разница между display и _display? К чему относится каждый?

Чтобы уточнить, я знаю, что делает @synthesize (он создает геттеры и сеттеры), но я не уверен, в чем именно разница, к чему относятся display и _display.

Я хорошо разбираюсь в java, поэтому, когда это возможно, свяжите свой ответ с ним.

Спасибо


person Nosrettap    schedule 28.01.2012    source источник
comment
возможный дубликат Что делает @synthesize window=_window?   -  person Ken Wayne VanderLinde    schedule 28.01.2012


Ответы (3)


display — это имя свойства. Это также влияет на то, как будут называться геттеры и сеттеры.

_display — это базовое поле в объекте, к которому будет обращаться свойство. Некоторым нравится оставлять его таким же, как и свойство — такое поведение происходит по умолчанию, так что это просто; некоторые люди любят ставить перед своими полями символы подчеркивания. (Некоторые сумасшедшие тоже любят использовать совершенно другие имена, но они сумасшедшие.)

person Community    schedule 28.01.2012
comment
Я предпочитаю ваш ответ документально-цитативному ответу только потому, что вы по праву признали определенную группу людей сумасшедшими. - person ; 28.01.2012
comment
в последнее время я вообще не объявлял поле. @property и @synthesize также объявят это поле за вас, если вы его пропустите, таким образом (ИМХО) делая код еще чище. - person samkass; 28.01.2012
comment
Хорошо, я думаю, следующий логический вопрос: в чем разница между свойством и этим базовым полем? Извините, если это глупый вопрос, я новичок в Objective-C; Мне просто нужен простой ответ. Просто кажется, что оба свойства и это базовое поле очень похожи на переменные экземпляра в java. - person Nosrettap; 28.01.2012
comment
Поля являются переменными экземпляра. Свойства — это сокращенный синтаксис для вызова функций доступа, а также способ автоматического создания этих методов доступа. - person ; 28.01.2012
comment
Базовое поле является именно переменной экземпляра. Объявление свойства сообщает компилятору, что вы хотите получить доступ к определенному значению из объекта, используя точечную запись, а не методы getter/setter (хотя вы всегда можете использовать и их — они эквивалентны). Добавление @synthesize к миксу дает вам бесплатные реализации методов доступа, включая правильное управление памятью на основе объявления свойства (например, сохранение, назначение и т. д.). - person UIAdam; 28.01.2012

Из Объявленные свойства — директивы реализации свойств:

Вы можете использовать форму property=ivar, чтобы указать, что конкретная переменная экземпляра должна использоваться для свойства, например:

@synthesize firstName, lastName, age=yearsOld;

Это указывает, что методы доступа для firstName, lastName и age должны быть синтезированы и что свойство age представлено переменной экземпляра yearsOld.

person Georg Fritzsche    schedule 28.01.2012

это говорит о том, что методы получения и установки отображения предоставляют доступ к переменной-члену _display.

вы можете использовать это, чтобы переименовать свои свойства извне.

person madmik3    schedule 28.01.2012