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?
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.
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.
copy
compte comme strong
. Utilisation:
@property (nonatomique, copie) NSString * nom;
https://devforums.Apple.com/message/654033#6540
ou même:
@property NSString * firstName;
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.