59 votes

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

Lorsqu'on ne compile pas avec ARC, il est recommandé d'utiliser 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 pour l'ARC ?

78voto

Joe Points 37343

Il est toujours recommandé de copier parce que vous voulez éviter que quelque chose passe une chaîne mutable et la modifie ensuite sans que vous le sachiez. Une copie garantit que la chaîne que vous avez ne changera pas.

14voto

dasblinkenlight Points 264350

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

NSString Les objets peuvent être mutables ou non. Lorsque vous recevez un NSString* en tant que paramètre, vous ne pouvez pas être certain qu'elle est immuable à moins de vérifier son type (et même dans ce cas, vous pouvez obtenir des faux positifs). Si votre algorithme repose sur le fait que la chaîne de caractères ne change pas après avoir été définie, faire une copie est la bonne chose à faire. L'ARC, en revanche, permet de s'assurer que l'objet n'est pas libéré alors que vous détenez une référence forte à celui-ci.

11voto

Snow Crash Points 6429

11voto

Matt Wilding Points 12931

Peu importe si vous utilisez ARC o non-ARC .

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

Cela peut arriver si quelqu'un vous fait passer un NSMutableString et le modifie par la suite. Cette considération est indépendante de l'environnement de gestion de la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X