2013-07-05 2 views
5

Мне просто интересно, следует ли использовать @synthesize, даже если Xcode делает это автоматически для свойств, просто потому, что это так сделано так долго? Или это означает, что мы все можем перестать использовать @synthesize (если у вас нет причины указывать переменную экземпляра другого имени)?Должен ли использоваться @synthesize?

Я просто хочу убедиться, что с профессиональной точки зрения я согласен с хорошей практикой кодирования.

+2

Я не думаю, что это действительно ответный вопрос. Лично я не буду использовать '@ synhesize', если я не буду (есть еще несколько случаев, когда вы это делаете), и хотя' -Weverything 'включает предупреждение, чтобы обнаружить это, я снова верну его. Дополнительный код не является полезным. –

+0

Итак, @StevenFisher, если я понимаю, это вопрос личных предпочтений? – ngoue

+0

Думаю? Я имею в виду, что он был сделан необязательным по какой-то причине. Я действительно думаю, что вы должны прекратить использовать его, кроме случаев, когда вам нужно. «Все» включает в себя всевозможные бесполезные вещи, и я думаю, что это один из них. –

ответ

9

я больше лично не использовать синтезируют для нового развития только, если не требуется (см комментарий lnafziger по ниже). Причина в том, что в настоящее время я разрабатываю для iOS 6, для чего требуется новая версия Xcode, которая имеет возможности автоматического включения @synthesize во время компиляции. Если бы я сделал это со старым кодом, все равно может быть кто-то из моей организации, который использует старую версию Xcode (i.e версия 4.2), где это может вызвать проблемы для них.

Так что, если вам все еще нужно быть совместимым со старыми версиями Xcode, этот ответ будет отличаться. Но если вам нужно только работать с новыми версиями Xcode, вы должны быть в порядке, не объявляя @synthesize.

+0

Это имеет смысл. Так что, хотя он стал дополнительным для более новой версии, в профессиональной среде, мне просто нужно было бы сделать его совместимым для нескольких людей, над которыми можно было бы работать? – ngoue

+0

Действительно, эти люди также должны использовать последний Xcode. :) Если вы создаете библиотеку с открытым исходным кодом, вы можете обосновать ее совместимость, но ... я бы этого не сделал. –

+1

Вам не нужно делать его совместимым для всех, если кто-то еще не использует старую версию Xcode. Опущение '@ synhesize' приведет к тому, что более старые версии Xcode выдадут ошибки компиляции, указав, что' @ property' не был синтезирован. Пока вам не нужно поддерживать более старые версии Xcode, я не вижу причин использовать '@ synhesize'. – Stunner

1

Если вы согласны с тем, что ваш ivar синтезирован с помощью _propertyName, вы можете спокойно избавиться от операторов синтеза. Если вы хотите, чтобы ваш Ивар будет называться что-то еще, вы должны включить его, как так

@synthesize propertyName = ________cool_ivar_name 
2

Чтобы ответить на ваш вопрос, я думаю, пропуская @synthesize не непрофессионально. Предполагая, что вам почему-то не нужно (и я расскажу об этом), я думаю, что более профессионально писать меньше и более чистый код. @synthesize - всего лишь шум.

Там в несколько случаев, когда вы могли бы рассмотреть его:

  1. Вам необходимы обеспечить совместимость со старым (32 битным OS X) время выполнения, или старую версию прошивки (предварительно +4,0).

    Примечание: Несмотря на то, что вам может понадобиться 32-разрядная ОС X, я даже не уверен, что Apple даже примет приложение, нацеленное на iOS до 4.0. Конечно, вы действительно ограничите себя.

  2. Ваш продукт является исходной библиотекой, которую вы хотите, чтобы другие разработчики могли использовать со старыми версиями Xcode.
  3. Вам необходимо использовать более старую версию Xcode (pre 4.4).
  4. Вы попали в кромку края на языке, где требуется @synthesize. (Есть, по крайней мере, один случай этого, связанный с категориями.) Если вы нажмете на это, @synthesize, что одна переменная и двигаться дальше. Не возвращайся и @synthesize все.
Обратите внимание, что если вы включите -Weverything, вы получите предупреждения об этом компиляторе. -Weverything включает в себя все, включая некоторые предупреждения, которые предполагают изменения, которые я бы счел нелогичными. Это одна из них. Найдите соответствующий предупреждающий переключатель, чтобы выключить его (это в предупреждающем сообщении) и сделать это.:)

Смотрите также:

+0

Я видел много людей об этом «-Все» ... не могли бы вы объяснить, что это для меня? – ngoue

+0

'-Weverything' - это флаг компилятора (в другом компиляторе C), который не только включает каждое предупреждение о компиляторе, но и включает все * будущие * предупреждения по мере их добавления. Проблема с предупреждениями компилятора традиционно заключается в том, что вам нужно включить их; если вы включаете '-Weverything', все они увольняются, и вы решаете, что вы хотите отключить. Но вы определенно не хотите кодировать вокруг них всех. Некоторые из них выходят за рамки педантичности и на самом деле заблуждаются. Поэтому некоторые предупреждения, которые вы хотите отключить. –

1

Там действительно нет общего правильный ответ на это. Помимо указанных технических причин, заданных другими ответами (например, привязка альтернативного имени ivar к свойству), я считаю, что наиболее важно поддерживать соответствие с вашим кодом. Если вы вносите вклад в более старые библиотеки, которые используют @synthesize повсюду, вы можете захотеть придерживаться его во имя согласованности. В противном случае, если вы начинаете заново и стреляете из-за менее подробного подхода, старайтесь как можно больше пропустить @synthesize. Мне лично нравится менее подробный код, но я несколько ценю последовательность кода, особенно при прополке тысяч строк кода.

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