4 Stimmen

NSColor und NSGradient als Eigenschaften - ein Grund zu kopieren?

Ich bin mit den Gründen für das Kopieren einer Immobilie im Gegensatz zum Behalten durchaus vertraut. (Im Wesentlichen der Wert vs. Beziehung Argument. Sie wollen fast immer Strings, zum Beispiel zu kopieren.)

Was ist mit NSColor und NSGradient?

Beide entsprechen dem NSCopying, sind aber in ihrer derzeitigen Implementierung unveränderlich.

Was denken Sie?

4voto

Brian Webster Punkte 11733

Unveränderliche Objekte implementieren oft ihre copyWithZone: Methode als return [self retain] Denn es macht keinen Sinn, eine separate Kopie der Daten zu erstellen, wenn sie sich nie ändern werden. Sie müssen die Methode allerdings noch implementieren, um mit allem kompatibel zu sein, das NSCopying-Konformität erwartet (z. B. NSDictionary-Schlüssel).

Was die Verwendung betrifft, würde ich bei den gleichen Verwendungsmustern wie bei anderen "Wert"-Eigenschaften bleiben, und Sie werden keinen Leistungsunterschied sehen, da sie wahrscheinlich die retain de copy sowieso. Dies gilt auch für Fälle wie das Hinzufügen einer veränderbaren Unterklasse, die eine nicht-triviale Implementierung von NSCopying hat.

3voto

Louis Gerbarg Punkte 43196

Unterklassen von NSColor und NSGradient, die Ihren Eigenschaften zugewiesen werden, sind möglicherweise nicht unveränderlich oder referenziell transparent. Daher sollten Sie dennoch dieselbe Logik für die Bestimmung von Beibehalten vs. Kopieren verwenden, die Sie für jedes Objekt verwenden würden, das üblicherweise veränderbare Unterklassen hat, auch wenn es in der Praxis wahrscheinlich keine Rolle spielt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X