Je veux savoir comment je peux exécuter une méthode dans un thread séparé? Classe & Références de méthode. Merci.Déclenchement d'une méthode pour exécution dans un thread séparé
Répondre
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];
Une autre alternative est
[someObject performSelectorInBackground:@selector(someSelector:)
withObject:nil];
chris.
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:]
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.
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.