NSString *myString = @"sample string";
NSString *newString = [myString copy];
Si configuro un punto de interrupción después de estas dos líneas, el puntero de myString es el mismo que el puntero de newString.NSString copia no copia?
WTF? ¿No se supone que la copia de NSString devuelve un puntero a un nuevo objeto? ¿O me estoy perdiendo algo fundamental sobre cómo se supone que funciona la copia?
No sé la respuesta, pero si cambia mystring entonces tanto tener diferentes direcciones ... hasta que el contenido de la cadena es la misma que está en la misma dirección ... –
Primero, en realidad no llamó a la copia, llamó a stringWithString :. En segundo lugar, dado que las cadenas son inmutables, el compilador y el tiempo de ejecución hacen optimizaciones. Por lo general, los objetos inmutables se devolverán con un recuento de referencia adicional en lugar de crear un objeto nuevo real. –
Beauty of cocoa: no hacer copias de los datos cuando no es necesario ... – stefanB