2013-03-25 3 views
31

жаль, что я разработчик iOS новичка, недавно я коротко услышал, что @synthesize теперь @synthesize в определенной версии Xcode и что компилятор будет автоматически синтезировать и свойства и назначать _ для частных переменных.Объектив-C является @synthesize обязательным или необязательным?

Я проверил это:

с вне @synthesize, вы можете получить доступ к свойствам и частного поля с помощью

self.property_name = something; 
_property_name = something; //(used in getter and setters) 

с @synthesize PROPERTY_NAME, вы можете получить доступ к свойствам и частного поля с помощью

self.property_name = something; 
property_name = something; 

Мой вопрос: действительно ли нам нужно @synthesize? или есть большая история, которую я пропускаю?

+1

не является обязательным. –

+1

последняя версия компилятора будет содержать '@ synhesize' для вас, если вы оставите ее в большинстве случаев. Я только что написал о свойствах здесь: http://stackoverflow.com/questions/15493882/need-assistance-regarding-objective-c-properties-concept/15494036#15494036 – nielsbot

+1

См. Http://stackoverflow.com/questions/11666008/ automatic-synthesized-properties-in-xcode-4-4 – rmaddy

ответ

51

Нет, нам не нужно это делать с Xcode 4.4, в котором добавлена ​​функция «Синтез свойств по умолчанию».

Проще говоря, он генерирует это автоматически:

@synthesize name = _name; 
+14

Предостережение: если вы переопределите все автоматически сгенерированные методы, эта строка не будет автоматически сгенерирована (но вы все равно можете записать ее самостоятельно, чтобы получить переменную). Кроме того, свойства, определенные в протоколах, не будут автоматически синтезированы (вместо этого вы получите предупреждение компилятора). Наконец, подклассы «NSManagedObject» также отключены таким образом, потому что это в значительной степени нежелательно. – borrrden

+3

Этот ответ * слишком * просто поставлен. Подробности читайте в этом сообщении: [Автоматический синтез свойств с помощью Xcode 4.4] (http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) –

+2

Другой Предостережение. Если вы объявили свойства в протоколе, им потребуется синтезировать. –

-3

Если вы не использовали его, как я, то вам все равно нужно, насколько я могу сказать:

в .h :

@property int32_t FwdID; 

в .m:

@synthesize FwdID; 

использования внутри класса:

FwdID = 0; 

Из того, что я могу сказать, если вы хотите по умолчанию работать для вас, вы должны будете ввести _FwdID = 0; в коде, который просто выглядит уродливым для меня.

Итак, если вы похожи на меня (нарушая все стандартные соглашения о кодировании, которые я предполагаю), вам все равно придется использовать синтез.

+0

Вы должны получить доступ к свойствам через свои getters и seters '[self setFwdID: 0];', иначе использовать реальную переменную экземпляра, а не свойство. –

Смежные вопросы