[TRUKéASTUCE] Deep Copy de collections

Eddy58Eddy58 Membre
Il existe deux approches différentes pour copier des objets de types collections (NSArray, NSDictionary,...). La première est une copie superficielle (shallow copy) de la collection, mais pas de son contenu. En d'autres termes, quand une collection est superficiellement copiée, le résultat est une seconde collection contenant les mêmes objets que la première. (mêmes objets donc pointeurs égaux)
Quand la copie "en profondeur" (deep copy) est utilisée, le résultat donne deux collections contenants des objets différents. (nouveaux objets donc pointeurs différents)
Par défaut, toutes les classes de type collection du framework Foundation implémentent la copie superficielle. Une technique afin d'obtenir une "deep copy" est d'utiliser les classes NSArchiver et NSUnarchiver.
Voici une fonction qui réalise une "deep copy", en prenant comme argument l'objet à  copier (celui-ci doit se conformer au protocole NSCoding), et retourne ensuite la "deep copy" de l'objet. 8)

<br />id DeepCopy (id &lt;NSCoding&gt; unObjet)<br />{<br />return [NSUnarchiver unarchiveObjectWithData:[NSArchiver archivedDataWithRootObject:unObjet]];<br />}<br />

Réponses

  • 06:38 modifié #2
    Petit ajout:

    C'est aussi intéressant pour copier des objets qui répondent à  NSCoding, mais pas à  NSCopying, comme par exemple NSView avec toutes leurs subviews.
Connectez-vous ou Inscrivez-vous pour répondre.