Frage

Mein Verständnis, dass das Einstellen eines IVAR nun das ihm zugewiesene Objekt beibehält strong Qualifikation. Weil Ivars im Rahmen des Objekts sind, in dem sie deklariert werden und in und strong Beibehält Objekte im Bereich der Variablen, dies bedeutet, dass der IVARS -Wert niemals freigegeben wird, während das Objekt, das den IVAR enthält, noch lebt.

Ist das richtig?

Wenn ja, habe ich Recht, dass es in Bezug auf das Gedächtnismanagement keinen Unterschied zwischen einer (starken) Eigenschaft (starker) und einfacher IVAR gibt?

War es hilfreich?

Lösung

Wenn eine Variable:

  1. Wird in einer Klasse benutzt BOGEN.
  2. Wird ausschließlich für die Klassenimplementierung verwendet (nicht als Teil der Klassenschnittstelle ausgesetzt).
  3. Erfordert keine Kvo.
  4. Erfordert keine benutzerdefinierten Getter/Setter.

Dann ist es angebracht, es als Ivar ohne entsprechend zu deklarieren @property/@synthesize, und um sich direkt in der Implementierung darauf zu beziehen. Es ist inline mit Verkapselung um diesen IVAR in der Klassen -Implementierungsdatei zu deklarieren.

// MyClass.h
@interface MyClass : ParentClass
@end

// MyClass.m
@implementation MyClass {
    NSString *myString;
}

- (void)myMethod {
    myString = @"I'm setting my ivar directly";
}
@end
  • Dieser Ivar wird als behandelt __strong vom Bogen Compiler.
  • Es wird initialisiert werden nil Wenn es ein Objekt ist, oder 0 Wenn es ein Primitiv ist.

Andere Tipps

Sie können nicht verwenden Kvo und machen Sie benutzerdefinierte Getter und Setter mit anderen Instanzvariablen, als dass sie bei der Verwendung von ARC sehr ähnlich sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top