Was ist die beste Methode zum Zurückhalten und Freigeben von Objekten, die an Klassenmethoden übergeben werden?Object-Retain-Verhalten von Objective-C-Klassenmethoden
Zum Beispiel, wenn Sie einen "Klassenvariable" haben erklärt, wie so:
static NSString *_myString = nil
... das Richtige ist, dies zu tun:
+ (void)myClassMethod:(NSString *)param {
_myString = param;
}
..., die das hat Nachteil, dass der Aufrufer eine Zählung beibehalten muss, die nicht null ist, um eine vorzeitige Freigabe zu verhindern. Alternativ könnte man dies tun:
+ (void)myClassMethod:(NSString *)param {
[_myString autorelease];
_myString = [param retain];
}
... was den Nachteil hat, dass ohne eine entsprechende Klasse-Ebene dealloc
nennen es ein Speicherleck wird. Oder sollte eine solche Klassenvariable Schikane vollständig vermieden werden, vielleicht mit einer Singleton-Klasse, die die Lebensdauer dieser Art von Objekten auf konventionellere Weise verwaltet?
Hier sind Apple's docs on creating a singleton instance.
Der Code, mit dem ich arbeite, ist das sehr glatte (aber immer noch neue) Objective Resource Projekt (http://www.iphoneonrails.com/).
Sie stellen die falsche Frage. Anstatt nach globalen Variablen zu fragen, sollten Sie nach Hilfe fragen, um Ihre globalen Variablen loszuwerden. Und ja, auch wenn Sie dies hinter einer Klassenmethode (oder als Singleton) verbergen, ist dies immer noch eine globale Variable. – Sven