iphone ios работает в отдельной ветке - PullRequest
95 голосов
/ 06 октября 2010

Каков наилучший способ запуска кода в отдельном потоке?Это:

[NSThread detachNewThreadSelector: @selector(doStuff) toTarget:self withObject:NULL];

Или:

    NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                        selector:@selector(doStuff:)
                                                                          object:nil;
[queue addOperation:operation];
[operation release];
[queue release];

Я делал второй способ, но я читал Поваренную книгу Уэсли, использующую первый.

Ответы [ 4 ]

242 голосов
/ 06 октября 2010

На мой взгляд, лучший способ - это libdispatch, также известный как Grand Central Dispatch (GCD). Он ограничивает вас iOS 4 и выше, но он так прост и удобен в использовании. Код, выполняющий некоторую обработку в фоновом потоке и затем выполняющий что-то с результатами в главном цикле выполнения, невероятно прост и компактен:

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
    });
});

Если вы еще этого не сделали, посмотрите видео с WWDC 2010 на libdispatch / GCD / blocks.

1 голос
/ 25 марта 2015

Лучший способ для многопоточности в iOS - использование 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
    });
});
0 голосов
/ 30 июня 2017

Я добавил категорию в NSThread, которая позволит вам легко выполнять потоки в блоках.Вы можете скопировать код отсюда.

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

0 голосов
/ 16 апреля 2015

Я бы попробовал все методы, которые опубликовали люди, и увидел бы, какой из них самый быстрый, но я думаю, что это лучший способ сделать это.

[self performSelectorInBackground:@selector(BackgroundMethod) withObject:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...