Proprietà contro ivar in tempi di ARC

A mio avviso, l’impostazione di un ivar ora mantiene l’object che gli è stato assegnato, poiché l’impostazione delle variabili è predefinita per il qualificatore strong . Poiché ivars si trova nell’ambito dell’object in cui sono dichiarati e strong conserva oggetti nell’ambito della variabile, ciò significa che il valore di ivars non verrebbe mai rilasciato mentre l’object che contiene l’ivar è ancora vivo.

È corretto?

Se è così, ho ragione nel pensare che, in termini di gestione della memoria, non c’è più differenza tra una proprietà di conservazione (forte) e un semplice ivar?

Se una variabile:

  1. Viene dichiarato in una class usando ARC .
  2. Viene utilizzato esclusivamente per l’implementazione di class (non esposto come parte dell’interfaccia di class).
  3. Non richiede alcun KVO .
  4. Non richiede alcun getter / setter personalizzato.

Quindi è opportuno dichiararlo come ivar senza una corrispondente @property / @synthesize e riferirlo direttamente all’interno dell’implementazione. È in linea con Encapsulation per dichiarare questo ivar nel file di implementazione della class.

 // 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 ARC.
  • Verrà inizializzato a nil se è un object o 0 se è un primitivo.

Non è ansible utilizzare KVO e fare getter e setter personalizzati con variabili di istanza diverse da quelle che sono molto simili quando si utilizza ARC.