2010-05-13 6 views
0

J'ai un projet d'application iphone. Je l'ai analysé en utilisant l'outil de fuite de mémoire d'instruments. Selon les instruments que j'ai 2 fuites Trace est la suivante:Pourquoi ai-je une fuite de mémoire dans UIApplication?

start main UIAplicationMain _run CFRunLoopInMode CFRunLoopRunSpecific PurpleEventCallback _UIAplicationHandleEvent sendEvent: handleEvent:withNewEvent:

Après cette trace, il y a deux traces distinctes. Quelles sont les causes et comment puis-je résoudre ce problème?

modifier: La fuite est sur la deuxième ligne conformément aux instruments

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, nil); //leak 
[pool release]; 
return retVal; 

Répondre

0

vous manque un NSAutoReleasePool pour les fils? Cette deuxième méthode ressemble à une sorte de rappel invoqué par un autre composant ou thread système.

Dans la mise en œuvre, créer un NSAutoReleasePool en haut et relâchez lorsque la méthode est fait:

void MyCallback { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // do stuff 
    [pool release]; 
} 
+0

Lorsque j'ai créé le projet (modèle d'application basé sur une fenêtre), j'ai utilisé le fichier main.m qui a été créé. Selon les instruments, il y a une fuite sur la deuxième ligne: NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain (argc, argv, nil, nil); [libération de piscine]; return retVal; – user339744

0

Il est peut-être un faux positif. UIApplicationMain crée probablement quelques objets qui sont destinés à traîner aussi longtemps que l'application existe et ne dérange donc jamais de les libérer.