В чем разница между performSelectorOnMainThread и dispatch_async в основной очереди?

У меня возникли проблемы с изменением представления внутри потока. Я попытался добавить подвид, но для отображения потребовалось около 6 или более секунд. Наконец-то он заработал, но не знаю, как именно. Поэтому мне было интересно, почему это сработало и в чем разница между следующими методами:

//this worked -added the view instantly
dispatch_async(dispatch_get_main_queue(), ^{
    //some UI methods ej
    [view addSubview: otherView];
}

//this took around 6 or more seconds to display
[viewController performSelectorOnMainThread:@selector(methodThatAddsSubview:) withObject:otherView
 waitUntilDone:NO];

//Also didnt work: NSNotification methods -  took also around 6 seconds to display
//the observer was in the viewController I wanted to modify
//paired to a method to add a subview.
[[NSNotificationCenter defaultCenter] postNotificationName:
 @"notification-identifier" object:object];

Для справки, это было вызвано внутри этого Completetion Handler класса ACAccountStore.

accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
            if(granted) {
            //my methods were here
            }
}

Изменить: когда я сказал, что это не сработало, я имел в виду, что для отображения добавленного мной представления потребовалось около 6 секунд.

53
задан Cœur 9 September 2017 в 20:21
поделиться