2010-06-14 8 views
0

Toute idée de pourquoi ce code me donne une fuite de mémoire? Comme vous pouvez le voir, je manque d'idées sur ce que je peux faire pour l'arrêter.Fuite de mémoire de l'application iPhone

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    NSArray *allSketches = [project.sketches allObjects]; 
    NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches]; 

    if(sketchesArray != nil) [sketchesArray release]; 

    [self setSketchesArray:temp]; 

    [allSketches release]; 
    allSketches = nil; 
    [temp release]; 
    temp = nil; 

} 

Je publie également sketchesArray dans viewDidDissapear. Je n'utilise pas viewDidLoad et dealloc pour init/release ces objets comme ce que je fais nécessite que j'utilise viewWillAppear et viewDidDissapear.

Merci

Répondre

1

fixe en utilisant ceci:

NSArray *allSketches = [project.sketches allObjects]; 
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:allSketches]; 

[self setSketchesArray:temp]; 

[temp release]; 

Bien que je me rappelle de cela et ça n'a pas marché avant ... Etrange ... Il semble y avoir encore quelques fuites de mémoire provenant de CoreGraphics bien. Est-ce normal?

0

Est-ce d'être libéré ailleurs quand vous avez fini avec elle?

[self setSketchesArray:temp]; 

Plus précisément, vous libérons sketchesArray dans cette fonction, mais faites-vous cela ailleurs lorsque vous avez terminé avec la vue?

+0

oui, c'est sorti en dealloc. cela fonctionne maintenant, au fait. Voir ci-dessus :) –

0

Je ne peux pas voir la fuite, mais vous avez quelques sur-versions probables.

La libération d'un non nilsketchesArray doit être gérée au setSketchesArray. Et il ne semble pas que vous ayez la propriété locale de allSketches non plus ...

+0

vous avez raison, merci. Je suis très nouveau à ce sujet et toujours pas utilisé pour le système de gestion de la mémoire. –