Proprietà vs. Ivar in tempi di arco
-
27-10-2019 - |
Domanda
Comprendo che l'impostazione di un Ivar ora mantiene l'oggetto assegnato ad esso, poiché l'impostazione delle variabili è predefinita a strong
qualificatore. Poiché ivari sono nell'ambito dell'oggetto in cui sono dichiarati e strong
Mantiene gli oggetti nell'ambito della variabile, ciò significa che il valore di Ivars non verrebbe mai rilasciato mentre l'oggetto contenente Ivar è ancora vivo.
È corretto?
In tal caso, ho ragione nel pensare che ci sia, in termini di gestione della memoria, nessuna differenza tra una proprietà di sostegno (forte) e un semplice Ivar?
Soluzione
Se una variabile:
- È dichiarato in una classe usando ARCO.
- Viene utilizzato esclusivamente per l'implementazione della classe (non esposto come parte dell'interfaccia di classe).
- Non richiede nessuno Kvo.
- Non richiede alcun getter/setter personalizzato.
Quindi è opportuno dichiararlo come un Ivar senza un corrispondente @property
/@synthesize
, e per riferirlo direttamente all'interno dell'implementazione. È in linea con Incapsulamento Per dichiarare questo IVAR nel file di implementazione della classe.
// MyClass.h
@interface MyClass : ParentClass
@end
// MyClass.m
@implementation MyClass {
NSString *myString;
}
- (void)myMethod {
myString = @"I'm setting my ivar directly";
}
@end
- Questo Ivar sarà trattato come
__strong
dal compilatore ad arco. - Sarà inizializzato a
nil
Se è un oggetto, o0
Se è un primitivo.
Altri suggerimenti
Non puoi usare Kvo E fai Getter e setter personalizzati con variabili di istanza diverse da quelle che sono molto simili quando si utilizzano l'arco.