2012-05-12 6 views
0

J'ai fait la navigation un contrôleur de vue à l'autre, mais quand j'ai fait plusieurs fois mon application montre la fuite de mémoire, j'exécute l'application avec détection de NSZombie, qui montre "Insuffisance des privilèges de tâche". Il est ARC activé (Xcode 4.2, iOS5) S'il vous plaît aider .......Memoryleak sur la navigation de viewcontroller dans iOS5

Mon code est ici:

self.locationMapDetail = [[LocationMapDetail alloc] init]; //14.3% Leak 
self.locationMapDetail.objItem = [self.parsedItems objectAtIndex:selectedIndex]; //5.7% Leak  
[self.navigationController pushViewController:locationMapDetail animated:YES]; //80.3% Leak 
self.locationMapDetail = nil; 
self.locationMapDetail.objItem = nil; 
+0

la fuite n'est pas nécessaire d'être dans l'une de ces lignes .. peut-être que les fonctions internes causent la fuite .. vérifiez le "LocationMapDetail" 'viewDidLoad' et d'autres méthodes seront déclenchées lorsque vous affichez ce viewController. –

+0

Instruments ne vous dit pas la ligne où la fuite est, mais la ligne où la fuite apparaît: de sorte que la fuite peut être dans une autre méthode ou classe. –

Répondre

0

Vous devez libérer les objets avant de le faire nil.Something comme

[self.locationMapDetail release]; 
self.locationMapDetail = nil; 

Vous devriez le faire pour tous les objets que vous allouez, si vous n'utilisez pas ARC. En cas de pointeurs forts, même si vous relâchez l'objet, vous risquez de ne pas le relâcher efficacement ou de le relâcher virtuellement car un pointeur fort ne peut être libéré que si toutes les références du pointeur fort ont été relâchées.Il arrive parce que parfois la cible peut avoir une forte référence de pointeur vers la variable déclarée.

Également S'il vous plaît mentionner la méthode que vous utilisez pour créer vos variables .. (viewDidLoad ou viewWillAppear) .Il est conseillé de le créer dans viewDidLoad.

+2

Ceci est faux pour deux raisons: 1. La question indique que l'ARC est activé, donc pas besoin de 'release'. 2. Sous le comptage manuel des références, la définition d'une propriété sur zéro libérera réellement la valeur; pas besoin d'une 'release' séparée. –

+0

Mais mon application est ARC activé et xcode4.2, ios5.0 donner une autre solution ....! – Ved

+0

@roronoa zorro: Merci beaucoup pour votre aide. Mon problème est résolu – Ved

0

J'ai également fait face au même problème, il m'a fallu presque 2 jours pour résoudre le problème. Enfin obtenu la solution. Assurez-vous que votre schéma de profil est en mode DEBUG au lieu de RELEASE. Cela résoudra le problème.

Questions connexes