Почему свойства не синтезируются автоматически - PullRequest
4 голосов
/ 01 ноября 2010

может быть, это глупый вопрос. Каждый раз, когда я делаю @property, мне нужно @synthesize. Но это не имеет смысла, единственное, что вы можете сделать с @property(whatever) Type* property, это сделать @synthesize property в файле реализации. Так зачем оба нужны? Почему компилятор не генерирует методы getter / setter автоматически, без необходимости писать @synthesize property.

Ответы [ 5 ]

14 голосов
/ 01 ноября 2010

В текущих производственных компиляторах по умолчанию (в случае без @synthesize) ничего не делается, а затем предупреждает, если реализация не предоставлена.

@synthesize автоматически в последнейверсии компилятора LLVM 2.0.

@dynamic не требуется при самостоятельной реализации метода установки / получения.@dynamic используется при динамическом предоставлении реализаций во время выполнения.То есть, @dynamic foo; в сочетании с @property <type> foo; заставит компилятор не предупреждать , если вы не предоставите реализацию -foo и -setFoo:.

Обратите внимание, что вы можететакже используйте @synthesize propertyName = instanceVariableName;, чтобы использовать конкретную переменную экземпляра с другим именем в качестве резервного хранилища.

@property в интерфейсе очень коротко для объявлений метода getter / setter.Он также содержит больше метаданных (сохранение, назначение и т. Д.), Которые используются компилятором во время @synthesize.

. И, как всегда, свойство atomic не очень помогает с безопасностью потока.

2 голосов
/ 01 ноября 2010

Это исторически сложилось так, что текущий компилятор требует этого. В XCode 4 эти @synthesize больше не потребуются (в соответствии с видео WWDC, надеюсь, я не нарушу здесь NDA) ...

1 голос
/ 01 ноября 2010

@synthesize не единственный вариант.@dynamic property также возможно.

0 голосов
/ 20 ноября 2012

Начиная с Xcode 4.4, теперь так и происходит. Синтез больше не требуется явно.

0 голосов
/ 01 ноября 2010

@ synthesize - не единственный вариант;есть также @dynamic, что означает, что вы будете реализовывать методы самостоятельно.[УДАЛЕНО;см. ответ bbum для более подробной информации.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...