Прохожу щас туториал "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
Здравствуйте, mymuss, Вы писали:
M>http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain
M>первый ответ
А там и второй ответ интересен, оказывается для NSString (т.е. immutable) copy аналогичен retain. Спасибо за ссылку.
Здравствуйте, 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. Т.е. зря беспокоился.