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 ?
Réponses
Trop de publicités?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.
copy
compte comme strong
. Utilisez :
@property(nonatomic,copy) NSString *name ;
https://devforums.apple.com/message/654033#654033
ou même :
@property NSString *firstName ;
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.