La création d'un Tableau de Tableaux dans XCode

Je suis en train de construire un tableau qui contient des tableaux de dictionnaire des objets dans Xcode. Je peux créer un tableau qui a un ou plusieurs dictionnaires en elle, puis utiliser la addObject: méthode pour ajouter à ce tableau comme un objet dans mon tableau principal. J'cycle autour de ce à plusieurs reprises, la reconstruction de travail tableau et ajouter des objets pour le tableau principal. Tout bon jusqu'ici, sauf que sur l'inspection de mon tableau principal, il contient des doublons de la dernière dictionnaires que le tableau a été construit avec. Je suppose que c'est parce que lorsque j'utilise le addObject il assigne simplement un pointeur vers le tableau, mais n'augmente pas le retenir de nombre ou de créer une copie de travail tableau, donc c'est à chaque fois reconstruit le tableau principal tout simplement des points au tableau.

Je suppose que ma question est comment puis-je créer une copie de travail de la matrice de l'ajouter au tableau principal et ensuite de le reconstruire et l'ajouter à nouveau? L'espoir qui fait sens et désolé si cela semble être une question de base - il est (je suis nouveau sur Xcode) - et toute aide serait vraiment appréciée.


        [sectionArray release];
        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

Tout cela fonctionne, ce qui est excellent. Une chose que je n'ai pas ma tête autour de encore, est-il un danger que quand je suis fait avec le tableau principal et je fais un [mainArray de presse] trop que l'enfant ces tableaux sera laissé dans la mémoire ou la libération de détruire ainsi?


J'ai résolu en ré-initialisation de l'intérieur tableau au lieu de simplement en enlevant tous les objets, c'est à dire,

J'ai eu:

        [sectionArray removeAllObjects];
        [sectionArray addObject:dict];

Et cela a changé:

        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

J'ai le sentiment que ce n'est pas une bonne chose à faire et je vais commencer à une fuite de mémoire dans tous les sens.

  • lorsque vous ne addObject dans un tableau, je blive le tableau conserve cet objet, de sorte que votre hypothèse que cette d oes arrive pas de mal
  • Exemple de Code? Ce que vous me demandez est possible, de sorte que vous pouvez avoir un bug.
  • Oui, il le fera. Vous avez besoin de libérer/autorelease il. Ou utiliser le NSMutableArray +méthode de tableau.
  • C'est bien - assurez-vous de la libération de l'ancien premier tableau, par exemple [sectionArray de presse] avant que les deux lignes ci-dessus. Lorsque vous avez appelé addObject le conserver compter sur l'objet sous-jacent sera augmenté, libérant sectionArray ne sera pas libre le tableau réel. Ensuite, lorsque vous relâchez le tableau de pointeurs, il sera libre à toutes les tables référencées par ces pointeurs.
  • C'est super merci les gars. Je suis vraiment gêné de demander de telles bases, et c'est vraiment utile.
  • Tout cela fonctionne, ce qui est excellent. Une chose que je n'ai pas ma tête autour de encore, est-il un danger que quand je suis fait avec le tableau principal et je fais un [mainArray de presse] trop que l'enfant ces tableaux sera laissé dans la mémoire ou la libération de détruire ainsi?
  • Ce sont des référence compté. Lorsque vous alloc c'est une numération de 1. Lorsque vous relâchez il obtient décrémenté. Si vous alloc et c'est 1. Maintenant, vous addObject et le tableau principal le retient. Maintenant, le nombre est 2. Maintenant, vous relâchez votre copie locale. Le nombre est 1. Lorsque le principal NSArray est relâché, il libère tout son contenu. Le décompte est maintenant à 0 et elle sera recueillie. Pas de fuites 🙂

InformationsquelleAutor Dave Hill | 2009-11-19