Подтвердить что ты не робот

В чем разница между "копией" и "сохранением"?

В чем разница между copy и retain для NSString?

- (void)setString:(NSString*)newString
{
    string = [newString copy];
}
4b9b3361

Ответ 1

В общем случае сохранение объекта будет увеличивать его количество задержек на единицу. Это поможет сохранить объект в памяти и не дать ему сдуться. Это означает, что если вы держите только сохраненную версию, вы обмениваетесь, которые копируются с тем, кто передал ее вам.

Копирование объекта, как бы вы это ни делали, должно создать другой объект с дублирующими значениями. Подумайте об этом как клоне. Вы НЕ разделяете клон с тем, кто передал его вам.

Если вы имеете дело с NSString в частности, вы не сможете предположить, что тот, кто дает вам NSString, действительно дает вам NSString. Кто-то может передать вам подкласс (NSMutableString, в данном случае), что означает, что они могут потенциально изменять значения под обложками. Если ваше приложение зависит от переданного значения, и кто-то его изменяет, вы можете столкнуться с трудностями.

Ответ 2

Сохранение и копирование - это две разные вещи: первая концептуально "вызов по ссылке", а второй - по умолчанию.

Ответ 3

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

copy. Он создает новый объект и когда создается новый объект, счетчик будет равен 1.

Надеюсь, что эта справка для U...:)

Ответ 4

Его старый пост, но здесь мой взгляд на вопрос

Сохранение увеличивает количество удержаний объекта на 1 и переходит в собственность объекта.

В то время как копия копирует данные, присутствующие в ячейке памяти, и назначает ее переменной, поэтому в случае копирования вы сначала копируете данные из местоположения, назначая ее переменной, которая увеличивает количество удержаний.

Просто помните, что сохраняются работы по ссылке и копированию по значению

Ответ 5

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

Ответ 6

Самое большое отличие состоит в том, что если вы используете copy, объект, который вы копируете, должен реализовать протокол NSCopying (очень легко сделать). Не каждый объект реализует это, поэтому вам нужно использовать осторожность, чтобы точно знать, с каким типом вы будете работать (или проверить поддержку этого протокола) при попытке вызвать copy.

Лучшее эмпирическое правило для использования copy, о котором я могу думать, - всегда устанавливать свойства NSString для "копирования" вместо сохранения. Таким образом, вы получите более точные показания с помощью инструмента "Утечки", если вы испортите и забудете освободить строку, на которую держится объект. Другие виды использования копии должны быть более тщательно продуманы.

Ответ 7

copy: создает новый экземпляр, который содержит копию получателя. Это означает, что у вас будет 2 разных

сохранить: Увеличивает retainCount получателя. Объект удаляется из памяти - (с dealloc), когда preserveCount равен 0.

Ответ 8

Атрибут сохранения

указан таким образом, что он может сохранить другую память, то есть ее можно указать на другой адрес также copy Сначала копирует адрес, а затем сохраняет его.