7
votes

Objectif c réseau et libération d'objets

J'ai une question débutante sur le point de publier les éléments d'un Nsarray. Voir ci-après pseudo code: xxx

Ma question ici est, quand je libère 2darray, dois-je libérer explicitement chacun de son élément (tableau) en premier? Aussi, avant de libérer l'objet "Array", dois-je libérer chacun de son élément (MyObject) d'abord?

Je suis nouveau dans l'objectif C. S'il vous plaît aider. Merci.


0 commentaires

3 Réponses :


15
votes

Non, vous n'avez pas besoin de dire à chaque objet d'être libérer d. Lorsque vous envoyez une méthode version à un nsarray , il envoie automatiquement une méthode version à chaque élément à l'intérieur d'abord.

Donc, dans votre cas, vous envoyez [version 2Darray] . Cela envoie automatiquement [version de tableau] à tous les autres tableau, qui envoie [version obj] sur chaque objet à l'intérieur de chaque tableau . .


0 commentaires

4
votes

Vous n'avez pas besoin de libérer les objets conservés. Nsarray les conserve lorsque vous ajoutez et libérons-les lors de la publication. Donc, si vous allouez, ajoutez à la matrice, puis relâchez-le, l'objet de la matrice aura le nombre de retenue de 1. Une fois que la matrice est libérée, l'objet est libéré, donc libéré. ​​


0 commentaires

2
votes

Lorsqu'un objet est créé, il dispose d'un nombre de retenue de 1. Chaque fois qu'un objet est ajouté à une matrice, son nombre de retenue est augmenté (dans ce cas à 2). Après avoir ajouté à la matrice, votre code publie sa prise de l'objet, laissant tomber son compte de retenue de 1 (à 1 dans ce cas). Ensuite, lorsque vous relâchez la matrice, il appelle la libération sur tout ce qu'elle dépose leur retenue compte de 1 (à 0 dans ce cas). Lors de la conservation des coups de comptage 0 L'objet est distribué.

Votre code semble correct d'un point de support de gestion de la mémoire.


0 commentaires