iphone iOS działa w osobnym wątku
Jaki jest najlepszy sposób na uruchomienie kodu w osobnym wątku? Jest:
[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];
Lub:
NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
selector:@selector(doStuff:)
object:nil;
[queue addOperation:operation];
[operation release];
[queue release];
Robiłem drugi sposób, ale książka kucharska Wesleya, którą czytałem, używa pierwszego.
4 answers
Moim zdaniem najlepszym sposobem jest libdispatch, czyli Grand Central Dispatch (GCD). Ogranicza cię do iOS 4 i nowszych, ale jest tak prosty i łatwy w użyciu. Kod do przetwarzania w wątku w tle, a następnie zrobienia czegoś z wynikami w głównej pętli run, jest niewiarygodnie łatwy i kompaktowy: {]}
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
//
//
dispatch_async( dispatch_get_main_queue(), ^{
// Add code here to update the UI/send notifications based on the
// results of the background processing
});
});
Jeśli jeszcze tego nie zrobiłeś, sprawdź filmy z WWDC 2010 na libdispatch/GCD / blocks.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-06 03:40:45
Najlepszym sposobem na wielowątkowość w iOS jest użycie GCD (Grand Central Dispatch).
//creates a queue.
dispatch_queue_t myQueue = dispatch_queue_create("unique_queue_name", NULL);
dispatch_async(myQueue, ^{
//stuffs to do in background thread
dispatch_async(dispatch_get_main_queue(), ^{
//stuffs to do in foreground thread, mostly UI updates
});
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 06:05:09
Chciałbym spróbować wszystkich technik, które ludzie opublikowali i zobaczyć, która jest najszybsza, ale myślę, że jest to najlepszy sposób, aby to zrobić.
[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 03:32:30
Dodałem kategorię na NSThread, która pozwoli Ci wykonywać wątki w blokach z łatwością. Możesz skopiować kod stąd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 22:34:03