2010-02-21 3 views
2

Si je déclare un NSArray avec alloc & retain en phrase alors devrais-je libérer l'objet NSArray deux fois (à savoir [arrayObject release] 2 fois)?NSArray libérer

Répondre

0

Non, vous devez libérer l'objet pour chaque alloc et chaque conserver. (Et vous ne pouvez pas alloc un objet plus de 1 fois en tout cas.)

+1

Cela ressemble plus à un oui qu'à un non. –

+0

@Peter: Mon mauvais, je lis * avec alloc et init sur la même ligne *. Je vais supprimer ma réponse demain. –

0

Si vous

NSArray* arrayObject; 
arrayObject = [[NSArray alloc] init]; 
arrayObject = [[NSArray alloc] init]; 
... 

alors il a juste mauvais code. Cette dernière tâche couvrira l'ancienne, ce qui provoque une fuite. Soit utiliser 2 objets et libérer chacun d'eux une fois:

NSArray* arrayObject1, arrayObject2; 
arrayObject1 = [[NSArray alloc] init]; 
arrayObject2 = [[NSArray alloc] init]; 
... 
[arrayObject1 release]; 
[arrayObject2 release]; 

ou libérer l'objet avant une autre initialisation.

NSArray* arrayObject; 
arrayObject = [[NSArray alloc] init]; 
... 
[arrayObject release]; 
arrayObject = [[NSArray alloc] init]; 
... 
[arrayObject release]; 
7

Si vous créez un NSArray avec un alloc et un retain sur la même ligne, alors vous faites probablement quelque chose de mal.

Les objets sont alloc ed avec un nombre de retenues de +1, il n'est donc pas nécessaire d'appeler le retain.

Pour répondre directement à votre question; oui, vous devez le release deux fois. Une fois parce que vous avez créé l'objet et une fois parce que vous l'avez édité. Mais je me demanderais pourquoi vous devez retenir un temps supplémentaire en premier lieu.