需要在iOS主線程上運行任何與UI相關的工作。有時候,我們需要做一些異步工作怎麼樣下載圖像,我們可能會使用dispatch_async當下載完成,我們讓主線程,像這樣的事情顯示出來:uikit方法是否保證在主線程上運行?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIImage *overlayImage = [self faceOverlayImageFromImage:_image];
dispatch_async(dispatch_get_main_queue(), ^{
[self fadeInNewImage:overlayImage];
});
});}
但是,當我們在本地加載圖片,我們通常只是這樣做無需調度的主線程:
UIImageView *imageView = [[UIImageView alloc] initWithImage:@"myimage.png"];
我的問題是,他們都保證將在主線程上運行?如果是,爲什麼我們應該使用dispatch_get_main_queue()來分派它?如果沒有,爲什麼我們不需要在主線程上發送每個與UI相關的工作?
澄清:大多數情況下,您需要使用dispatch的原因是* you *啓動了後臺線程,並且該線程需要更改一些UI。除非通過一些處理切換到UI線程的回調來完成UI更改(例如進度條的setProgress),否則您必須使用分派。 – ToolmakerSteve