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.

Author: Mike S, 2010-10-06

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.

 240
Author: Jacques,
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
    });
});
 1
Author: Kusal Shrestha,
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];
 0
Author: Bobby,
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.

Https://medium.com/@umairhassanbaig/ios-how-to-perform-a-background-thread-and-main-thread-with-ease-11f5138ba380

 0
Author: Umair,
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