2009-02-21 7 views
0

J'utiliser ce code pour copier instance de ma classeGestion de la mémoire. Copier méthode

//Create the copy and pass it onto edit controller 
PoolFacility *poolCopy = [self.thePoolFacility copy]; 
self.childController.thePoolFacilityCopy = poolCopy; 
[poolCopy release]; 

Maintenant, quand je vois les variables dans le débogueur, comment se fait quelques-uns des champs de classe ont la même adresse de mémoire? Ne devraient-ils pas être indépendants? Selon Apple

Le protocole NSCopying déclare un procédé pour fournir des copies fonctionnelles d'un objet. La signification exacte de «copie» peut varier d'une classe à l'autre, mais une copie doit être un objet fonctionnellement indépendant dont les valeurs sont identiques à l'original au moment de la copie.

Les deux cas sont poolCopy & la thePoolFacility originale

alt text

Ma méthode de copie de classe ressemble à ceci:

- (id)copyWithZone:(NSZone *)zone { 
    PoolFacility *copy = [[[self class] allocWithZone:zone]init]; 

    copy.name = [self.name copy]; 
    copy.type = [self.type copy]; 
    copy.phoneNumber = [self.phoneNumber copy]; 
    //make sure I get proper copies of my dictionaries 
    copy.address = [self.address mutableCopy]; 
    copy.webAddress = [self.webAddress copy]; 
    copy.prices = [self.prices mutableCopy]; 
    copy.pools = [self.pools mutableCopy]; 

    return copy; 
} 

Répondre

6

cours Immuable tels que NSString (mais pas NSMutableString) don Pas besoin d'offrir une copie réelle, car ils ne peuvent pas être modifiés. Je suppose que ces classes effectuent simplement une optimisation qui ne devrait pas affecter le comportement du copieur.

+0

Oui, sur les objets non mutables, la copie est la même que la conservation. –

Questions connexes