2009-03-17 6 views
0

J'ai un UIScrollView qui a plusieurs pages d'information qui sont ajoutées comme sous-vues à la scrollView. Le contrôleur de chaque sous-vue est stocké dans un NSMutableArray dans scrollViewController.Releasing subviews

J'ai des fuites de mémoire dans les sous-vues, et j'essaie de les réparer en m'assurant que la méthode dealloc de chaque contrôleur subview est appelée. Je le fais en libérant les contrôleurs de vue à l'intérieur de la méthode dealloc du contrôleur scrollView.

Lorsque j'essaie de libérer la baie après la libération des contrôleurs subViews, l'application se bloque. Le code suit ... qu'est-ce que je fais mal?

- (void)dealloc { 

// Loop through the array of subView controllers and release them 
for (int i = 0; i < [viewControllers count]; i ++) { 
    [[viewControllers objectAtIndex:i] release]; 
} 

[viewControllers release]; // Crashes here unless I remove the loop above 
[scrollView release]; 
[pageControl release]; 
[theKnot release]; 
[super dealloc]; 

}

Répondre

4

NSMutableArray prend possession des objets qu'il contient - il incrémente leur compte de référence lorsqu'ils sont ajoutés, et dégagera ses objets quand elle se libère. En supposant que vous ayez libéré ou libéré automatiquement chaque contrôleur de vue après l'avoir placé dans votre matrice viewControllers, il n'est pas nécessaire de boucler les objets dans viewControllers et de les libérer - le tableau le fera pour vous.

Vous vous plantez lors de la libération de la baie car la baie tente de libérer les objets que vous avez déjà libérés et qui ne sont plus valides.

1

NSArray libère son contenu lorsqu'il est libéré, de sorte que les objets sont libérés à la fois dans votre boucle (qui les libère vraisemblablement) et ensuite dans le tableau.

Vous devriez lire le memory management guide d'Apple si vous envisagez de créer des applications iPhone. Ce n'est pas si difficile, mais c'est quelque chose que vous devez apprendre. Sinon, vous aurez des fuites et des accidents et vous ne savez pas pourquoi. Une fois que vous aurez compris les quelques règles simples de Cocoa, tout sera clair.

Questions connexes