2010-05-10 21 views
0

J'ai donc le code suivant dans une méthode que je veux définir une image de UIImageView à celle d'un à partir d'une source en ligne:En utilisant NSThread pour résoudre d'attente pour l'image d'URL sur l'iPhone

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

Puis, en la méthode appelée par le fil que j'ai ceci:

- (void) loadImage 
{ 
    NSURL *url = [NSURL URLWithString:logoPath]; // logoPath is an NSString with path details 
    NSData *data = [NSData dataWithContentsOfURL:url]; 

    logoImage.image = [UIImage imageWithData:data]; 
} 

cela fonctionne très bien mais je reçois beaucoup d'avertissements dans la console Debugger le long des lignes de:

2010-05-10 14: 30: 14.052 ProjectTitle [2930: 633f] *** _NSAutoreleaseNoPool(): Object 0x169d30 de classe NSHTTPURLResponse autoreleased sans piscine en place - juste une fuite

Cela se produit plusieurs fois chaque fois que j'appelle le nouveau thread et finalement, sans motif, après avoir appelé quelques-uns de ces threads, j'obtiens l'erreur d'exécution classique 'EXC_BAD_ACCESS'.

Je comprends que cela se passe parce que je ne retiens pas l'objet mais comment puis-je le résoudre avec le code dans 'loadImage' montré ci-dessus?

Merci

Répondre

1

Vous devez créer un pool autorelease pour le thread sinon des objets que vous ne relâchez pas explicitement ne sera pas obtenir leur libération. Voir le Apple Docs, qui vous dit essentiellement de faire ce qui suit:

- (void)myThreadMainRoutine 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Top-level pool 

    // Do thread work here. 

    [pool release]; // Release the objects in the pool. 
} 
+0

Excellent merci :) –