2011-10-20 9 views
56

Tengo entendido que establecer un ivar ahora conserva el objeto que se le asigna, ya que la configuración predeterminada de las variables es el calificador strong. Como los ivars están en el alcance del objeto en el que están declarados y strong retiene objetos dentro del alcance de la variable, esto significa que el valor de ivars nunca se liberará mientras el objeto que contiene el ivar aún esté vivo.Propiedad vs ivar en tiempos de ARC

¿Es esto correcto?

Si es así, ¿estoy en lo cierto al pensar que, en términos de gestión de la memoria, ya no hay diferencia entre una propiedad retenida (fuerte) y un simple ivar?

+1

Buena pregunta, me preguntaba si en algún momento. –

Respuesta

67

Si una variable:

  1. se declara en una clase utilizando ARC.
  2. Se utiliza únicamente para la implementación de clases (no se expone como parte de la interfaz de clase).
  3. No requiere ningún KVO.
  4. No requiere ningún getter/setter personalizado.

entonces es apropiado para declarar como una Ivar sin un correspondiente @property/@synthesize, y para referirse a ella directamente dentro de la aplicación. Está en línea con Encapsulation para declarar este ivar en el archivo de implementación de la clase.

// MyClass.h 
@interface MyClass : ParentClass 
@end 

// MyClass.m 
@implementation MyClass { 
    NSString *myString; 
} 

- (void)myMethod { 
    myString = @"I'm setting my ivar directly"; 
} 
@end 
  • Este Ivar será tratado como __strong por el compilador ARC.
  • Se inicializará a nil si es un objeto, o 0 si es un componente.
+0

No puedo estar seguro acerca de 2 elementos. U puede acceder al ivar público utilizando classInstance-> iVar = @ "New value" –

+2

@DenisMikhaylov Buen punto. Aunque creo que me iré en el "punto 2" porque estoy hablando de las mejores prácticas, y probablemente no sea una buena práctica acceder directamente a los ivars de una clase. – bearMountain

+0

respuesta concisa, gracias. –

6

No puede usar KVO y realizar getter y setters personalizados con variables de instancia distintas a las que son muy similares cuando se usa ARC.

Cuestiones relacionadas