2010-05-17 3 views
0

Je déclare un NSArray dans mon code puis construit le tableau à partir d'un autre tableau. Je traite mon NSArray et quand j'ai fini, je voudrais libérer les objets, mais je réutilise ce pointeur sur NSAarray plus tard pour faire le même processus (en créant le tableau d'un autre tableau, puis en le libérant). Je dois garder le pointeur. Que dois-je faire?NSArray: libère ses objets, mais garde un pointeur

Voici à peu près ce que je veux faire, le buildArray crée et retourner un NSArray autoreleased:

NSArray *myArray; 
for (int i = 0, i < 10, i++){ 
    myArray = [NSArray arrayWithArray:[self buildArray]]; 
    // Here I process myArray 

    ... 

    myArray = nil; // is my guess 
    } 

Je dois garder un pointeur vers mon NSArray, afin de réutiliser plus tard dans la boucle, mais Qu'arrive-t-il aux objets créés avec [self buildArray]? Quel est le meilleur à faire pour ne pas garder les objets et les tableaux inutilisés?

Ou peut-être la meilleure solution consiste simplement à supprimerAllObject du tableau ..?

Merci!

Répondre

1

Vous ne pouvez pas réutiliser un NSArray puisqu'il est immuable. Vous pouvez cependant utiliser un NSMutableArray (qui prend en charge -removeAllObjects).

Si vous êtes besoin est de garder le pointeur, mais ne ont pas besoin constant dans les boucles, vous pouvez simplement utiliser

loop { 
    NSArray* myArray = [self buildArray]; 
    ... 
    // myArray = nil; // optional. 
} 
+0

donc, quand je suis à la mise en monTableau nulle, les objets seront libéré? – leochab

+0

@Leo: Non ce ne sera pas. – kennytm

+0

alors que dois-je faire afin de les libérer ..? Je pensais que ce serait asbuildArray retourne un tableau autoreleased .. – leochab

0

Ne le faites pas comme ça. Au lieu de cela, faites:

for (int i = 0, i < 10, i++){ 
    NSArray *myArray = [self buildArray]; //buildArray should return an autoreleased object 
    //Process array 
    //myArray goes out of scope and is autoreleased later, releasing all of its objects 
}