2010-04-18 5 views
0

créer un second fil pour appeler une méthode qui télécharge plusieurs images en utilisant:iphone - fuites de mémoire dans thread séparé

[NSThread detachNewThreadSelector:@selector(downloadImages) toTarget:self withObject:nil]; 

Il fonctionne très bien, mais je reçois une longue liste de fuites dans le journal semblable à:

2010-04-18 00: 48: 12.287 FS Companion [11074: 650F] *** _NSAutoreleaseNoPool(): Object 0xbec2640 de classe NSCFString autoreleased sans piscine en place - juste une fuite Stack: (0xa58af 0xdb452 0x5e973 0x5e770 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00: 48: 12.288 FS Companion [11074: 650f] *** _NSAutoreleaseNoPool(): Objet 0xbe01510 de classe NSCFString libéré sans pool en place - Fuite juste Pile: (0xa58af 0xdb452 0x5e7a6 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

2010-04-18 00: 48: 12.289 FS Companion [11074: 650F] *** _NSAutoreleaseNoPool(): Object 0xbde6720 de classe NSCFString autoreleased sans piscine en place - juste une fuite Stack : (0xa58af 0xdb452 0x5ea73 0x5e7c2 0x11d029 0x517fa 0x51708 0x85f2 0x3047d 0x30004 0x99481fbd 0x99481e42)

Quelqu'un peut-il m'aider à comprendre le problème?

Répondre

3

L'erreur est "_NSAutoreleaseNoPool()". Il n'y a pas de NSAutoreleasePool allouée par défaut dans un thread. Vous devez en créer un vous-même, sinon les objets -autorelease seront divulgués.

Votre -downloadImages devrait donc ressembler à ceci:

-(void)downloadImages { 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    ... 
    [pool drain]; 
} 
+0

merci beaucoup – Brodie

1

Je suis sur un problème similaire ... avec des fils imbriqués drôles qui fuit comme l'enfer. N'oubliez pas de libérer la piscine aussi. :-)

-(void)downloadImages { 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 
    ... 
    [pool release]; 
    pool =nil; 
} 
+0

Ehhhmm ... drain libère déjà une piscine. Je ne le savais pas. – MacTouch