A partir de clang 3.2 (alrededor de febrero de 2012), la "síntesis predeterminada" (o "síntesis de propiedades auto") de las propiedades de Objective-C se proporciona por defecto. Es esencialmente como se describe en la publicación de blog que leyó originalmente: http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (excepto que esa publicación describe la función como "habilitada, luego deshabilitada"; no sé si eso es un problema con Xcode o si los desarrolladores de clang sí lo han hecho y adelante en la pregunta).
Por lo que yo sé, el único caso en el que las propiedades serán no se sintetizará por defecto en clang 3.2 cuando esas propiedades se heredaron de un protocolo. He aquí un ejemplo:
#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; }
Si compila este ejemplo, obtendrá una advertencia:
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.
y si lo ejecuta, obtendrá un error de tiempo de ejecución:
objc[45820]: A: Does not recognize selector forward:: (while forwarding setFinicky:)
Illegal instruction: 4
¿Tiene un enlace donde @synthesize se describe como innecesario? – bneely
Quizás ha visto algo de información sobre el NDA Xcode 4.4 actualmente en uso y se ha confundido acerca de los números de versión. –
@bneely agregó un enlace. Tal vez estoy malinterpretando "@synthesize es automático en las últimas versiones del compilador LLVM 2.0". – SundayMonday