[英]Strange behavior of dispatch_get_main_queue
我有一個啟用了分頁的UIScrollView,我想顯示一些帶有圖像的“頁面”。
我將第一頁的圖像加載到主線程中並顯示它。 然后,我開始在后台線程中加載其他頁面圖像
dispatch_async(loadingImagesQueue, ^{
for (int i = 0; i < numberOfImages; i++) {
NSString *imagePath = [arrayWithImagePaths objectAtIndex:i];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Posting notification\n\n");
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_NAME_IMAGE_PREPARED object:image];
});
}
});
發布通知后,調用某些方法,女巫創建了一個新頁面,其中包含加載的圖像。
我將日志消息放入加載圖像並創建新的頁面方法,我希望它看起來像一則關於加載圖像的消息,然后一則關於創建新頁面的消息。
但是,由於某種原因,它將首先加載所有圖像,然后才開始創建新頁面。 我可以通過日志消息看到它。 最奇怪的是,在加載最后一張圖像與開始創建新頁面之間存在很大的延遲(大約0.5秒)。
誰能解釋,這種奇怪行為的原因是什么?
您正在調用dispatch_async。 如果您想在主隊列中那一刻執行通知,請調用dispatch_sync(dispatch_get_main_queue(), ^{ ...
並確保在分派主隊列中的任何內容時檢查您是否不在主線程上(在這里,您非常安全,但這通常是個好習慣,否則您可能會遇到鎖)。
因此完整的代碼將是
if([NSThread isMainThread] == NO){ dispatch_sync(dispatch_get_main_queue(), {...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.