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

Должно ли свойство NSString в ARC быть сильным или копировать?

При компиляции с ARC рекомендуется использовать свойства copy для типов данных, таких как NSString. Я не мог найти правильную документацию по использованию copy в режиме ARC. Может ли кто-нибудь сказать мне, что применимо для ARC?

4b9b3361

Ответ 1

По-прежнему рекомендуется копировать, потому что вы хотите избежать того, что передаете изменяемую строку, а затем меняете ее, не зная. Копия гарантирует, что строка, которая у вас есть, не изменится.

Ответ 2

Копирование и ARC ортогональны: вы копируете изменяемые объекты для "замораживания" своего состояния; ARC отслеживает количество ссылок на объекты.

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

Ответ 3

Не имеет значения, используете ли вы ARC или не-ARC.

Обоснование copy заключается в том, что вы можете гарантировать, что внутреннее состояние вашего класса не может быть изменено вне реализации.

Это может произойти, если кто-то передаст вам NSMutableString, а затем изменит его позже. Это соображение не зависит от среды управления памятью.