web-dev-qa-db-fra.com

Une propriété NSString sous ARC doit-elle être solide ou copiée?

Lorsque vous ne compilez pas avec ARC, il est recommandé d'utiliser les propriétés copy pour les types de données tels que NSString. Je n'ai pas pu trouver de documentation appropriée sur l'utilisation de copy en mode ARC. Quelqu'un peut-il me dire ce qui est applicable à l'ARC?

59
rustylepord

Il est toujours recommandé de copier, car vous voulez éviter que quelque chose ne passe une chaîne modifiable, puis la modifie à votre insu. Une copie garantit que la chaîne que vous avez ne changera pas.

77
Joe

La copie et l'ARC sont orthogonaux: vous faites des copies d'objets mutables pour "figer" leur état; ARC garde une trace du nombre de références d'objet.

NSString les objets peuvent ou non être modifiables. Lorsque vous recevez un NSString* en tant que paramètre, vous ne pouvez pas être certain qu'il est immuable à moins que vous ne vérifiiez son type (et même alors vous pouvez obtenir des faux positifs). Si votre algorithme repose sur la chaîne qui ne change pas après avoir été définie, faire une copie est la bonne chose à faire. ARC, d'autre part, s'assurera que l'objet n'est pas libéré pendant que vous tenez une référence forte à lui.

14
dasblinkenlight
11
Snowcrash

Peu importe si vous utilisez ARC ou non-ARC.

Le raisonnement derrière copy est pour que vous puissiez garantir que l'état interne de votre classe ne peut pas être modifié depuis l'extérieur de l'implémentation.

Cela peut se produire si quelqu'un vous passe un NSMutableString, puis le modifie plus tard. Cette considération est indépendante de l'environnement de gestion de la mémoire.

10
Matt Wilding