Las propiedades son solo una forma conveniente de acceder a los datos. Por lo tanto, cuando declare la propiedad @property (no atómica, retenga) SomeType * someObject; esto significa que durante el acceso no habría sintetizarse 2 métodos:
getter:
-(SomeType*) someObject {
return someObject;
}
setter
-(void) setSomeObject:(SomeType*) obj {
[someObject release];
someObject = [obj retain];
}
Así que la principal diferencia entre las propiedades y ivars es que las propiedades crear dinámicamente el setter/getter métodos (y puedes anularlos). Pero cuando estás escribiendo algún objeto = new_val, solo estás copiando la referencia a la ubicación de la memoria. No se realiza ningún trabajo adicional allí excepto una instrucción de ensamblaje.
Hay una cosa más para mencionar: atómica y no atómica. Con atomic, el setter/getter sintetizado asegurará que siempre se devuelva un valor completo desde el getter o que establezca el setter, independientemente de la actividad del setter en cualquier otro thread. Es decir, si el hilo A está en el medio del captador mientras el hilo B llama al colocador, un valor viable real, un objeto liberado automáticamente, será devuelto al llamante en A.
En no atómico, no se hacen tales garantías. Por lo tanto, no atómico es considerablemente más rápido que atómico.
Editar: por lo tanto, si tiene alguna variable, a la que se accede desde diferentes hilos o/y se debe realizar algún trabajo adicional (por ejemplo, retener, levantar algunos indicadores ...), entonces su elección es propiedad. Pero a veces tiene una variable a la que se accede con mucha frecuencia y el acceso a través de la propiedad puede generar una gran sobrecarga, ya que el procesador debe realizar muchas más operaciones para sintetizar y llamar al método.
Posible duplicado de [¿cuándo debería usar la palabra clave self.] (Http://stackoverflow.com/questions/4080523/when-should-i-use-the-self-keyword) Esto se pregunta con mucha frecuencia, no ¿buscas antes de hacer la pregunta? – zoul