Objective-C скопировать и сохранить - PullRequest
8 голосов
/ 22 июня 2011

Когда я должен использовать copy вместо использования retain? Я не совсем понял.

Ответы [ 3 ]

29 голосов
/ 22 июня 2011

Вы будете использовать copy, если хотите гарантировать состояние объекта.

NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];

В этот момент b была просто испорчена 3-й строкой.

NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];

В этом случае b является исходной строкой и не изменяется 3-й строкой.

Это относится ко всем изменяемым типам.

7 голосов
/ 04 декабря 2012

сохранить : это делается на созданном объекте и просто увеличивает счетчик ссылок.

copy - создает новый объект и, когда новыйобъект создан, количество сохранений будет 1. Надеюсь, это поможет вам.

4 голосов
/ 22 июня 2011

Копирование полезно, когда вы не хотите, чтобы полученное вами значение изменялось без вашего ведома.Например, если у вас есть свойство NSString, и вы полагаетесь на то, что эта строка не изменяется после того, как она установлена, вам нужно использовать copy.В противном случае кто-то может передать вам NSMutableString и изменить значение, которое, в свою очередь, изменит базовое значение вашего NSString.То же самое относится и к NSArray и NSMutableArray, за исключением того, что copy в массиве просто копирует все ссылки на указатели в новый массив, но не позволяет удалять и добавлять записи.

...