Pregunta

Tengo entendido que establecer un IVAR ahora retiene el objeto que se le asigna, ya que la configuración de las variables predeterminadas al strong Calificatorio. Porque los Ivares están en el alcance del objeto en el que se declaran y strong retiene objetos dentro del alcance de la variable, esto significa que el valor de Ivars nunca se liberaría, mientras que el objeto que contiene el Ivar todavía está vivo.

¿Es esto correcto?

Si es así, ¿tengo razón al pensar que, en términos de gestión de la memoria, no hay diferencia entre una propiedad de retención (fuerte) y un IVAR simple?

¿Fue útil?

Solución

Si una variable:

  1. Se declara en una clase usando ARCO.
  2. Se usa únicamente para la implementación de clase (no expuesta como parte de la interfaz de clase).
  3. No requiere ninguno Kvo.
  4. No requiere ningún getter/setter personalizado.

Entonces es apropiado declararlo como un ivar sin un correspondiente @property/@synthesize, y para referirse a él directamente dentro de la implementación. Está en línea con Encapsulación para declarar este IVAR en el archivo de implementación de 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 de arco.
  • Se inicializará a nil Si es un objeto, o 0 Si es un primitivo.

Otros consejos

No puedes usar Kvo y realice getter y setters personalizados con variables de instancia distintas de que son muy similares cuando se usan ARC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top