Un buen ejemplo para el uso de allocWithZone: es cuando se va a implementar el protocolo NSCopy, que le permite realizar su encargo objetos copiable (copia profunda/copia de valor) como:
(1) ClassName *newObject = [currentObject copy]; //results in newObject being a copy of currentObject not just a reference to it
El NSCopy protocolo garantiza que implemente un método:
(2) -(id)copyWithZone:(NSZone *)zone;
al copiar un objeto del mensaje de 'copia' que envía el anterior (1) cuando se expresa como 'copyWithZone envía un mensaje con el método (2). aka no tienes que hacer nada para obtener una zona tú mismo.
Ahora, como tiene una 'zona' enviada a este mensaje, puede usarla para asegurarse de que se hace una copia de la memoria en la misma región que el original.
Esto puede ser usado como:
-(id)copyWithZone:(NSZone *)zone
{
newCopy = [[[self class]allocWithZone:zone]init]; //gets the class of this object then allocates a new object close to this one and initialises it before returning
return(newCopy);
}
Este es el único lugar Soy consciente allocWithZone se utiliza realmente.
Tenga en cuenta que la documentación de Apple actual (2014) dice que el parámetro 'zone' se ignora, y que" Este método existe por razones históricas, Objective-C ya no usa las zonas de memoria. " Entonces la respuesta aceptada puede no ser la correcta. –