2010-09-13 13 views

Respuesta

29

La semántica normales de copymutableCopy y son para darle vuelta un objeto retenido, al igual que la creación de una nueva vía alloc/init tendría. No aumentan el recuento de referencia del objeto que se está copiando, si eso es lo que estás preguntando. Desde el NSObject documentation para copy:

Si está utilizando memoria administrada (no recolección de basura), este método conserva el nuevo objeto antes de devolverlo. El invocador del método, sin embargo, es responsable de liberar el objeto devuelto.

+6

+1, excepto que bajo algunas circunstancias ('copiando un objeto inmutable, por ejemplo), invocando' copia' puede simplemente incrementar el conteo retenido y devolver el mismo objeto. (sin embargo, las mismas reglas de administración de memoria aún se aplican, por supuesto) –

+0

+1 @Dave, absolutamente cierto. Sin embargo, no hay diferencia práctica para la persona que llama. –

+4

Lo que es más importante, el recuento de retención preciso es un detalle de implementación en el que el programador no debería estar pensando. Cuando 'copies', puedes tratar eso como un nuevo objeto con un conteo de retención de 1 en cualquier programa correcto. El recuento de retención real no es esencialmente de nuestra incumbencia. – Chuck