NSString *myString = @"sample string";
NSString *newString = [myString copy];
Si je définis un point d'arrêt après ces deux lignes, le pointeur de myString est le même que le pointeur de newString.La copie NSString ne copie pas?
WTF? Est-ce que la copie NSString n'est pas supposée renvoyer un pointeur vers un nouvel objet? Ou est-ce que je manque quelque chose de fondamental sur la façon dont la copie est supposée fonctionner?
je ne sais pas la réponse, mais si vous changez maChaine alors à la fois avoir l'adresse différente ... jusqu'à ce que le contenu de la chaîne est le même, il est dans le même adresse ... –
Tout d'abord, vous n'avez pas réellement appelé copy, vous avez appelé stringWithString :. Deuxièmement, puisque les chaînes sont immuables, le compilateur et l'exécution font des optimisations. Les objets habituellement immuables seront retournés avec un nombre de références additionnel plutôt que de créer un nouvel objet réel. –
La beauté du cacao - ne pas faire des copies de données quand ce n'est pas nécessaire ... – stefanB