Средства доступа Objective-C также доступны без @synthesize.

Рассмотрим следующий код:

@interface TestClass ()

@property NSString *privateProperty;

@end

Теперь, как я узнал, чтобы компилятор также создавал методы доступа, мне нужно добавить директиву @synthesize в @implement-part.

Но также, если не добавлять директиву, работает следующее сообщение:

[self setPrivateProperty:@"foo"];

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


person moritz.vieli    schedule 23.12.2012    source источник


Ответы (3)


Начиная с версии xcode 4.5 все свойства будут синтезироваться автоматически.

person yinkou    schedule 23.12.2012
comment
На самом деле это не новая функция Xcode. Это новая функция компилятора LLVM, которая появилась в новых версиях Xcode. Вы потеряете эту функцию, если скажете Xcode использовать другой компилятор. Вы также получаете эту функцию без Xcode, если компилируете свой код с помощью компилятора LLVM. - person rmaddy; 23.12.2012

Объявление @property объявляет о существовании методов получения и установки. Объявление @synthesize создает реализации этих методов.

До Xcode 4.5 у вас было бы предупреждение компилятора о пропуске @synthesize и сбой во время выполнения - оба вызваны отсутствием реализации методов, которые вы неявно объявили.

Начиная с Xcode 4.5, реализация методов синтезируется автоматически, если вы не укажете иное (@dynamic).

person grahamparks    schedule 23.12.2012

Это новая функция, представленная в последней версии XCode: она автоматически синтезирует свойство, создавая переменную _propertyName для его хранения.

person il Malvagio Dottor Prosciutto    schedule 23.12.2012