8
votes

Qu'est-ce que -arraywitharray réellement faire?

Je veux voir exactement comment cela crée un tableau. Comment puis-je afficher les fichiers .m qui montrent comment cela se fait?


0 commentaires

4 Réponses :


2
votes

Non, le cacao n'est pas open source.

Si vous avez une question, vous devriez simplement le demander.

Ce serait un moyen valide de l'implémenter: xxx

Vous pouvez lire la source Gnustep pour Nsarray , mais sachez qu'il s'agit d'une autre mise en œuvre de la API de cacao.


0 commentaires

2
votes

Si vous demandez quel est le but de + arraywitharray code> (en plus d'être un wrapper automatique autour de -Initwitharray code>), je dirais que c'est ceci: utilisez-le quand vous Voulez-vous créer une copie autorélisée d'un tableau. En d'autres termes, vous pouvez le voir comme ceci:

NSArray * original = /* ... */;
NSArray * newArray = [[original copy] autorelease];


1 commentaires

Ce n'est pas entièrement vrai. Votre hypothèse est que original est un nsarray. Mais cela peut être quelque chose dérivé de Nsarray. Et la classe de l'objet peut implémenter son propre copier . Par conséquent, [[[Copie originale] AutoRelease]; n'est pas garanti de renvoyer un NSARRAY.



16
votes

Comme @ken mentionné, vous ne pouvez pas voir la source (bien que vous puissiez démonter la méthode via GDB).

La méthode elle-même crée une immuable (ne peut pas être changée), autorélisée copie de la matrice donnée. Les suivants sont identiques dans le comportement: xxx

choisissez celui que vous aimez en fonction de la brièveté, je suppose: -).


3 commentaires

Hmmm ... c'est immuable? Eh bien, j'ai besoin d'envoyer chaque objet dans la nouvelle array un message de libération supplémentaire (ALLOC INIT d'occasion), donc il n'y a aucune fuite. Comment libérer tous les objets d'un tableau immuable?


Les objets sont retenus par la matrice lorsqu'ils sont ajoutés, donc lorsque le tableau est libéré, les objets à l'intérieur doivent également être libérés.


Pourquoi avez-vous besoin d'un nouveau tableau pour envoyer un message de libération aux objets? Impossible signifie que la matrice ne peut pas être modifiée, vous pouvez toujours modifier (ou envoyer des messages à) objets à l'intérieur du tableau ... ou mieux encore, des objets AutoRelease avant de les ajouter au tableau, puis vous n'avez pas à vous soucier de quoi que ce soit.



0
votes

gnustep, la mise en œuvre de GNU de la spécification OpenStep de laquelle cacao et cacao touch descend, implémente + arraywitharray: comme suit: xxx

http://svn.gna.org/viewcvs/gnustep /Libs/base/trunk/source/nsarray.M?View=markup


0 commentaires