Я прочитал "Что нового в Xcode", но я не могу найти официальное объяснение этой функции. Где я могу найти официальное объяснение? Какая документация? Спасибо.
Xcode 4 автоматически генерирует iVars при использовании свойства @, где я могу найти официальный документ для этой функции?
Ответ 1
Вы можете найти это в документации Apple в Objective-C Язык программирования: Объявленные свойства в разделе "Директивы по реализации объектов". Независимо от того, синтезируется ли ivar, зависит от того, какое время работы вы используете:
Существуют различия в поведении синтезатора доступа, зависящие от времени выполнения (см. также "Разница времени выполнения" ):
- Для устаревшей среды выполнения переменные экземпляра уже должны быть объявлены в блоке @interface текущего класса. Если переменная экземпляра с тем же именем, что и свойство существует, и если его тип совместим с типом свойств, он используется, иначе вы получите ошибку компилятора.
- Для современных сред выполнения (см. "Версии среды выполнения и платформы" в Objective-C Руководство по программированию времени выполнения) переменные экземпляра синтезируются по мере необходимости. Если переменная экземпляра с тем же именем уже существует, она используется.
iOS всегда использует современную среду выполнения, поэтому вам не нужно явно объявлять ivars.
Ответ 2
Предполагая, что вы имеете в виду, что он автоматически генерирует методы ivar, getter и setter, даже если вы опускаете @synthesize
: это по-разному называется синтезом свойств по умолчанию, автоматическим синтезом свойств и автосинтезом свойств.
Там не так много документации. Насколько мне известно, существует официальная документация нет о том, как она работает, только о том, что она существует.
Это действительно функция clang, а не функция Xcode. Он появился кратко в версии clang, поставляемой с Xcode 4.0 DP 4, но вскоре был удален из-за ошибок. Он появился в версии clang, поставляемой с Xcode 4.4. Вот коммит, который добавил его, я думаю.
Вы можете найти его в Objective-C Feature Availability Index.
Он также упоминается в Расширения языка Clang.
Из эксперимента:
-
Если вы явно не используете свойство
@synthesize
и генерируете переменную экземпляра, она автоматически генерирует ivar с тем же типом (и в соответствии с квалификацией собственности ARC) в качестве объявленного свойства. Имя ivar будет символом подчеркивания (_
), за которым следует объявленное имя свойства. -
Если вы не явно
@synthesize
areadonly
, а do включите явный метод getter, тогда clang будет not автоматически генерирует ivar для вас. -
Если вы не явно
@synthesize
areadwrite
, а сделать, включите и явный getter и явный сеттер, затем снова clang будет не автоматически генерировать ivar для вас.
Но я не знаю никакой официальной документации об этих поведении.
Ответ 3
На самом деле это часть компилятора.
Вы можете прочитать это на веб-сайте LLVM
.
Ответ 4
Я также обратил бы ваше внимание на Руководство по кодированию для Cocoa, которое советует:
Избегайте явного объявления переменных публичного экземпляра.
Разработчики должны заботиться о интерфейсе объектов, а не о том, как он хранит свои данные. Вы можете избежать явного объявления переменных экземпляра с помощью объявленных свойств и синтеза соответствующей переменной экземпляра.