2010-03-26 8 views
1

Dans Objective-c J'ai ceci:libérant des tableaux objectif-c

SomeObject *values[3][3]; 

quand désaffecter, comme en C++ dois-je libérer élément par élément?

Ou si je fais:

[values release]; 

est ok?

Répondre

7

release ne s'applique qu'aux objets Objective-C. Un tableau de style C (comme vous avez là-bas) est juste un peu de mémoire de pile.

Dans votre cas, il semble que vous l'utilisiez pour stocker 3x3 = 9 objets Objective-C. Si vous voulez tous les libérer, vous devez le faire élément par élément. L'analogie C++ ne tient pas dans ce cas car le tableau lui-même n'est pas un objet Objective-C.

(Si vous teniez des choses dans un NSMutableArray, la réponse serait différente. Vous devriez examiner cette question par la voie.)

-1

Il est un tableau de pointeurs. Juste values points au premier objet, donc [values release] ne publiera que le premier objet. Vous devez libérer chaque objet dans le tableau.

+0

Ceci est incorrect, [Validation des valeurs] ne libère pas le premier objet dans le tableau. Mais [Valeurs [0] libération] sera. –

+2

@invariant: Ceci est incorrect, '[values ​​[0] release]' ne publiera pas le premier objet dans le tableau * 2D *. Mais '[values ​​[0] [0] release]' sera. – kennytm