Propiedad vs. Ivar en tiempos de arco
-
27-10-2019 - |
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?
Solución
Si una variable:
- Se declara en una clase usando ARCO.
- Se usa únicamente para la implementación de clase (no expuesta como parte de la interfaz de clase).
- No requiere ninguno Kvo.
- 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, o0
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.