[iOS, newbie] @property(copy) NSString* - зачем?
От: xanton  
Дата: 02.05.12 16:14
Оценка:
Прохожу щас туториал "Start Developing iOS Apps Today", в начале которого разрабатывается типичное HelloWorld приложение: делаем поле для ввода имени, лабел и кнопку, по нажатию на которую показываем сообщение "Hello, Имя". Для хранения имени там предлагается использовать @property(copy) NSString *userName. Только что дочитал туториал до того места, в котором пишут что NSString оказывается immutable, и у меня сразу возник вопрос: зачем ранее мы указывали аттрибут copy? Не правильнее ли хранить ссылку на неизменяемые данные, а не копировать их?

На всякий случай ссылка на исходный код хелло ворлда: https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/JumpRightIn/iPhone101/Articles/07_Troubleshooting.html
Re: [iOS, newbie] @property(copy) NSString* - зачем?
От: mymuss  
Дата: 02.05.12 16:21
Оценка: 3 (1)
http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain

первый ответ
Re[2]: [iOS, newbie] @property(copy) NSString* - зачем?
От: xanton  
Дата: 02.05.12 16:43
Оценка:
Здравствуйте, mymuss, Вы писали:

M>http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain


M>первый ответ


А там и второй ответ интересен, оказывается для NSString (т.е. immutable) copy аналогичен retain. Спасибо за ссылку.
Re[3]: [iOS, newbie] @property(copy) NSString* - зачем?
От: mymuss  
Дата: 02.05.12 16:49
Оценка:
Здравствуйте, xanton, Вы писали:

X>А там и второй ответ интересен, оказывается для NSString (т.е. immutable) copy аналогичен retain. Спасибо за ссылку.


Да действительно аналогичен. Но стоит все же использовать copy. Это как final параметры в java, можно не использовать -- ничего не поломается, но это признак хорошего стиля. Теоретически NSString может быть заменен на NSMutableString впоследствии при рефакторинге.
Re[4]: [iOS, newbie] @property(copy) NSString* - зачем?
От: xanton  
Дата: 02.05.12 17:07
Оценка:
Здравствуйте, mymuss, Вы писали:

M>Здравствуйте, xanton, Вы писали:


X>>А там и второй ответ интересен, оказывается для NSString (т.е. immutable) copy аналогичен retain. Спасибо за ссылку.


M>Да действительно аналогичен. Но стоит все же использовать copy.


С этим я не спорю. Я это к тому, что при использовании @property(copy) NSString *userName, при исполнении
NSString *test = [NSString stringWithFormat:@"Hello, %@!", nameString];
[object setUserName:test]
строка test не будет скопирована, как я изначально предполагал, а просто увеличится счетчик ссылок на нее, т.к. она immutable. Т.е. зря беспокоился.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.