GCD 後台線程中下載圖片並直接賦值給 UIImageView,導致界面不更新或崩潰。
dispatch_async(dispatch_get_global_queue(...), ^{
UIImage *img = [UIImage imageNamed:...];
[self.loadingImage setImage:img]; // 非主線程操作 UI
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *img = [UIImage imageNamed:numberString];
dispatch_async(dispatch_get_main_queue(), ^{
[self.loadingImage setImage:img]; // 回主線程更新 UI
});
});
所有 UIKit 操作必須在主線程執行。後台線程僅用於耗時計算、網絡請求、圖片解碼等。