9

Estoy tratando de deshacerme de una advertencia molesta que CLANG/LLVM 3.0 me está dando. He puesto el siguiente Ivar en mi objeto:La propiedad se supone atómica por defecto

bool preloaded; 

Y la siguiente declaración de propiedad:

@property(readonly) bool preloaded; 

y la siguiente llamada a sintetizar:

@synthesize preloaded; 

Tal como está, el compilador se queja :

Property is assumed atomic by default

Si cambio la declaración de propiedad para agregar "atómica":

@property(atomic,readonly) bool preloaded; 

Se queja de que, también:

error: expected a property attribute before 'atomic'

por lo que parece que me cuelguen si lo hago y condenen si yo no' t ... ¿Hay algo que me falta?

+0

Bueno, 'atomic' no es una palabra clave atributo válido, así que tiene sentido que el segundo bit produce un error. Sin embargo, Dunno sobre el primero. –

+0

Sí, eso es lo que pensé, pero viendo cómo la sintaxis de Xcode resalta "atómica", pensé que tal vez la hubieran agregado como una palabra clave de atributo válida. – Karl

+0

Intenté '@property (atomic, readonly) bool preloaded;' y compila bien. Elimina la advertencia también. Estoy usando Xcode 4.2.1. –

Respuesta

9

Parece que tiene el Propiedades del objetivo atómico implícito C advertencia del compilador LLVM habilitada en la configuración de su proyecto. Al apagar esto eliminará la advertencia.

Como se indicó anteriormente, atomic no es una palabra clave válida, y solo está implícita en la ausencia de nonatomic. A partir de Declared Properties documentation de Apple:

You can use this attribute to specify that accessor methods are not atomic. (There is no keyword to denote atomic.)

+0

Voy a marcar esto como "correcto" ya que deshabilitar la configuración elimina la advertencia, pero todavía estoy desconcertado sobre por qué esas propiedades fueron marcadas para empezar. ¿Es un error en LLVM? Sería mucho más feliz si pudiera mantener todas las advertencias habilitadas ... – Karl

+2

Las advertencias son más que un juego de satisfacción del compilador, sirven como un recordatorio para el desarrollador de estar al tanto de ciertos comportamientos durante la programación. Para mantener activada la advertencia pero deshabilitar esta instancia, consulte [Controlling Static Analyzer Diagnostics] (http://clang.llvm.org/docs/UsersManual.html#diagnostics) en la documentación de Clang. – jnic

+0

¡Impresionante! Eso funcionó como un encanto! Ahora puedo compilar con todas las advertencias excepto pedantic (debido a mi uso de ## __ VA_ARGS__ para el registro) – Karl

Cuestiones relacionadas