Ich denke "muss" im Sinne von muss ist ein wenig stark. Sie können entweder copy
oder retain
verwenden, aber Sie sollten generell copy
für Ihre NSString*
-Eigenschaften verwenden, weil:
NSMutableString
ist eine Unterklasse von NSString
. Daher ist es durchaus möglich, dass jemand Ihre NSString*
-Eigenschaft so einstellt, dass sie auf eine veränderbare Zeichenfolge zeigt. Dadurch wird die Möglichkeit geschaffen, die Zeichenfolge während der Verwendung zu ändern. NSString
bleiben die Kopiervorgänge erhalten und das ursprüngliche Objekt wird trotzdem beibehalten. In Anbetracht dieser drei Punkte ist es schwer, sich einen guten Grund zu überlegen, retain
anstelle von copy
für Ihre NSString
-Eigenschaften zu verwenden.
bevorzugen copy
. Es spielt keine Rolle, ob deine Klasse ein Singleton ist oder nicht.
Ich habe dafür eine ziemlich ausführliche Erklärung geschrieben, die veränderliche und unveränderliche Typen hier beschreibt: NSMutableString als beibehalten / kopieren
Sie können auch kopieren statt beibehalten. Ich benutze Kopie für NSString. Es gibt eine gute Diskussion zu diesem Thema. Hier ist ein Stackoverflow-Post NSString Copy oder Retain?
Sie können beides verwenden, In beiden Fällen sind Sie Eigentümer der Objekte und müssen in dealloc veröffentlicht werden.
> Unterschied zwischen copy
und retain
.
beibehalten: - & gt; Es erhöht nur die Retain-Anzahl für das existierende Objekt.
kopieren: - & gt; es kiste das neue Objekt für Ihre Immobilie
In beiden Fällen: Sie besitzen Objekte.
Lesen Sie das Apple Speicherverwaltungskonzept .
@ Claus Broch: Aus Apple-Dokumentation
Sie übernehmen Besitz eines Objekts, wenn Sie Erstelle es mit einer Methode, deren Name beginnt mit "alloc", "new", "copy", oder "MutableCopy" (z. B. alloc, newObject oder mutableCopy) oder wenn Sie sende ihm eine Retain-Nachricht.
Sie sollten den Retain-Wert in dieser Instanz verwenden. Der Grund dafür ist, dass 1. Sie möchten nicht, dass das Objekt freigegeben wird 2. Wahrscheinlich werden Sie den Wert des NSString irgendwann ändern wollen
Mit dem Attribut copy wird im Grunde gesagt, dass der Wert Ihres NSString nicht ohne Warnung geändert werden sollte. d. h. es wird der Wert des NSString gleichzeitig gesetzt und abgerufen.
Für diese Implementierung sollten Sie retain verwenden, oder zumindest das ist mein Verständnis. Weitere Informationen finden Sie hier: Ссылка