Начиная с версии 3.2 (около февраля 2012 г.), «синтез по умолчанию» (или «автоматический синтез свойств») свойств Objective-C предоставляется по умолчанию. По сути, это как описано в сообщении в блоге, которое вы первоначально прочитали: http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (за исключением того, что в этом сообщении эта функция описывается как «включена, затем отключена»; я не знаю, является ли это проблемой с Xcode или разработчиками Clang сами пошли взад и вперед по этому вопросу).
Насколько я знаю, единственный случай, когда свойства не будут синтезироваться по умолчанию в clang 3.2, - это когда эти свойства были унаследованы от протокола. Вот пример:
#import <Foundation/Foundation.h>
@protocol P
@property int finicky;
@end
@interface A : NSObject <P>
@property int easygoing;
@end
@implementation A
@end
int main() { A *a = [A new]; a.easygoing = 0; a.finicky = 1; }
Если вы скомпилируете этот пример, вы получите предупреждение:
test.m:11:17: warning: auto property synthesis will not synthesize property
declared in a protocol [-Wobjc-protocol-property-synthesis]
@implementation A
^
test.m:4:15: note: property declared here
@property int finicky;
^
1 warning generated.
и если вы запустите его, вы получите сообщение об ошибке во время выполнения:
objc[45820]: A: Does not recognize selector forward:: (while forwarding setFinicky:)
Illegal instruction: 4