10 Stimmen

Objective-C kopieren und behalten

Wann sollte ich copy anstelle von retain verwenden? Das habe ich nicht ganz verstanden.

0 Stimmen

In der Verteidigung dieser Frage sind die anderen alle spezifisch für Immobilientypen, aber ja, diese Frage wurde oft gestellt.

34voto

Joshua Weinberg Punkte 28440

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.

7voto

iPhone NewBIe Punkte 407

retain : Es wird auf dem erstellten Objekt durchgeführt und erhöht nur die Referenzzählung.

copy -- Es erstellt ein neues Objekt und wenn das neue Objekt erstellt wird, wird die Referenzzählung 1 sein. Hoffentlich hilft dir das.

4voto

Joe Punkte 56389

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.

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