2009-01-15 5 views

Répondre

3

trouvé la réponse (vous pouvez utiliser l'une de ces déclarations pour y parvenir):

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

OU

NSThread *myThread = [[NSThread alloc] initWithTarget:self 
        selector:@selector(myThreadMainMethod:) 
        object:nil]; 
[myThreadstart]; 
4

Une autre alternative est

[someObject performSelectorInBackground:@selector(someSelector:) 
     withObject:nil]; 

chris.

2

Si vous avez déjà créé un NSThread et vous avez tenu sur l'objet NSThread, vous pouvez ensuite envoyer plusieurs messages à effectuer sur ce fil en utilisant:

–[NSObject performSelector:onThread:withObject:waitUntilDone:] 
1

Vous avez besoin d'une nouvelle piscine de dégagement automatique gérer toutes les libérations automatiques dans ce thread. Le thread principal en a un qui est créé automatiquement par le framework avant d'arriver à votre code.

Assurez-vous également si vous effectuez une mise à jour de l'interface que vous déléguez au thread principal. La mise à jour peut fonctionner ou ne pas fonctionner si vous ne le faites pas

[self performSelectorOnMainThread:@selector(someSelector:) 
       withObject:passedInObject waitUntilDone:NO]; 

chris.

2

trouvé la réponse à ma propre question:

Quand je commence une nouvelle méthode dans un thread séparé , pourquoi ai-je besoin d'un objet NSAutoreleasePool dans cette méthode ? Si je ne l'ajoute pas, j'obtiens une pile de pool dans le journal.

Pools autolibération et du fil (MemoryMgmt.pdf de Apple.com):

Chaque thread dans une application Cocoa maintient sa propre pile d'objets NSAutoreleasePool. Lorsqu'un thread se termine, il libère automatiquement tous les pools de libération automatique associés à lui-même. Autorelease piscines sont automatiquement créés et détruit dans le thread principal de applications basées sur le kit d'application , de sorte que votre code normalement ne pas doivent y faire face. Si vous effectuez des appels Cocoa en dehors du thread principal du kit d'application , cependant, vous devez créer votre propre pool de libération automatique . C'est le cas si vous écrivez une application Foundation-only ou si vous détachez un thread.