1
在講座10呈現的攝影愛好者示例代碼,2011年秋季,照片被下載,然後使用下面的代碼更新到一個表視圖控制器:如何在不同的調度隊列異步調度任務時同步任務? (攝影愛好者例如)
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader", NULL);
dispatch_async(downloadQueue, ^{
NSArray *photos = [FlickrFetcher recentGeoreferencedPhotos];
dispatch_async(dispatch_get_main_queue(), ^{
self.navigationItem.rightBarButtonItem = sender;
self.photos = photos;
});
});
dispatch_release(downloadQueue);
照片獲取活動被分派異步上flickr下載隊列和表視圖更新代碼(UIKit功能)將在class中討論的main_queue上異步分派。
我不明白的是確保main_queue上的表視圖更新代碼直到照片獲取活動完成後才執行的機制。在代碼塊中,這些隊列被串行調度,但是我沒有在照片下載完成之後,系統如何知道不在main_queue上執行任務。如果沒有發生,如果main_queue任務在照片下載完成之前運行,self.photos將爲零。
哦......所以它的包含程序塊可以確保塊內語句的順序執行,因此-recentGeoreferencedPhotos在UI代碼分派之前完成。得到它了!謝謝。 – ChipK