Eigentum gegen Ivar in Zeiten von Bogen
-
27-10-2019 - |
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?
Lösung
Wenn eine Variable:
- Wird in einer Klasse benutzt BOGEN.
- Wird ausschließlich für die Klassenimplementierung verwendet (nicht als Teil der Klassenschnittstelle ausgesetzt).
- Erfordert keine Kvo.
- 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, oder0
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.