Un bon exemple d'utilisation de allocWithZone: quand vous êtes à la mise en œuvre de la NSCopy protocole, ce qui vous permet de rendre vos objets personnalisés copiable (copie / copie par valeur) comme:
(1) ClassName *newObject = [currentObject copy]; //results in newObject being a copy of currentObject not just a reference to it
Le NSCopy protocole permet de s'assurer que vous mettre en œuvre une méthode:
(2) -(id)copyWithZone:(NSZone *)zone;
Lors de la copie d'un objet de la "copie" message de vous envoyer en tant que ci-dessus (1) est converti en un "copyWithZone: le message de la" derrière les scènes et les appels de votre méthode (2). aka vous n'avez pas à faire tout pour obtenir une zone de vous-même.
Maintenant que vous avez une "zone" envoyé ce message, vous pouvez l'utiliser pour s'assurer qu'une copie est faite à partir de la mémoire dans la même région que l'original.
Ceci peut être utilisé comme:
-(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);
}
C'est le seul endroit où je suis conscient allocWithZone est réellement utilisée.