Verwende ich retain oder copy in meinem Singleton?

8

Ich habe irgendwo gelesen, dass man mit NSString in einem Objekt kopieren statt beibehalten muss. Kann jemand erklären, ob das richtig ist und warum?

Zum Beispiel habe ich folgende Erklärung für meinen Singleton:

%Vor%     
milof 31.05.2011, 05:38
quelle

5 Antworten

8

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:

  1. Normalerweise möchten Sie nicht, dass sich eine String-Eigenschaft unter Ihrer Nase verändert;
  2. 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.
  3. Bei unveränderlichen Klassen wie 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.

    
Caleb 31.05.2011, 05:56
quelle
4

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

    
justin 31.05.2011 06:19
quelle
3

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?

    
Rahul Vyas 31.05.2011 06:03
quelle
0

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.

    
Jhaliya 31.05.2011 05:53
quelle
-2

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: Ссылка

    
Chance Hudson 31.05.2011 05:53
quelle

Tags und Links