Wann sollte ich copy anstelle von retain verwenden? Das habe ich nicht ganz verstanden.
Antworten
Zu viele Anzeigen?Sie würden copy
verwenden, wenn Sie den Zustand des Objekts garantieren möchten.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
An diesem Punkt wurde b gerade durch die 3. Zeile durcheinander gebracht.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
In diesem Fall ist b der originale String und wird nicht von der 3. Zeile verändert.
Dies gilt für alle veränderbaren Typen.
Kopie ist nützlich, wenn Sie nicht möchten, dass der Wert, den Sie erhalten, ohne Ihr Wissen geändert wird. Zum Beispiel, wenn Sie eine Eigenschaft haben, die ein NSString
ist und darauf vertrauen, dass sich dieser String nach dem Setzen nicht ändert, müssen Sie copy verwenden. Andernfalls kann Ihnen jemand ein NSMutableString
übergeben und den Wert ändern, was wiederum den zugrunde liegenden Wert Ihres NSString
ändert. Das Gleiche gilt für ein NSArray
und NSMutableArray
, außer dass das Kopieren eines Arrays nur alle Zeigerreferenzen auf ein neues Array kopiert, jedoch verhindert, dass Einträge entfernt und hinzugefügt werden.
0 Stimmen
Möglicher Duplikat von NSString Eigenschaft: Kopieren oder Behalten? oder Objective C Zuweisen Kopieren Behalten oder Behalten Kopie von freigegebenen Objekten oder Wann wird retain und wann wird copy verwendet oder @property: Behalten oder kopieren? oder viele andere
0 Stimmen
In der Verteidigung dieser Frage sind die anderen alle spezifisch für Immobilientypen, aber ja, diese Frage wurde oft gestellt.