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?

È stato utile?

Soluzione

Se una variabile:

  1. È dichiarato in una classe usando ARCO.
  2. Viene utilizzato esclusivamente per l'implementazione della classe (non esposto come parte dell'interfaccia di classe).
  3. Non richiede nessuno Kvo.
  4. 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, o 0 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top