dispatch_group_t picDownloadGroup = dispatch_group_create(); // 用于處理圖片下載
dispatch_group_t scriptProcessingGroup = dispatch_group_create(); // 用于處理 scripts 屬性
for (YJGGoodsModel *goodsModel in goods) {
// 1. 處理 picUrl(圖片下載)
if (goodsModel.picUrl) {
dispatch_group_enter(picDownloadGroup); // 標(biāo)記任務(wù)進(jìn)入圖片下載組
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:goodsModel.picUrl]
completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
if (image) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
CGFloat scale = image.size.height / image.size.width;
CGFloat width = (kScreenWidth() - kNewWidth(24)) / 2.0;
CGFloat picHeight = width * scale;
goodsModel.picHeight = picHeight;
dispatch_group_leave(picDownloadGroup); // 任務(wù)完成,離開組
});
} else {
goodsModel.picHeight = YJGW(176); // 默認(rèn)高度
dispatch_group_leave(picDownloadGroup); // 任務(wù)失敗也離開組
}
}];
}
// 2. 處理 script 屬性
if ([goodsModel.script isKindOfClass:[NSArray class]]) {
if (goodsModel.script.count > 0) {
for (NSDictionary *dic in goodsModel.script) {
if ([dic isKindOfClass:[NSDictionary class]]) {
NSInteger displayType = [[NSString stringWithFormat:@"%@", dic[@"displayType"]] integerValue];
NSString *scriptIconUrl = dic[@"scriptIconUrl"];
if (displayType == 1) {
goodsModel.goodLeftTagImgUrl = scriptIconUrl;
} else if (displayType == 2) {
goodsModel.goodRightTagImgUrl = scriptIconUrl;
} else if (displayType == 3) {
dispatch_group_enter(scriptProcessingGroup); // 標(biāo)記任務(wù)進(jìn)入 script 組
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[NSString contextText:goodsModel.mpName imgUrl:scriptIconUrl font:kMFont(14) color:nil completion:^(NSAttributedString *attributedText) {
goodsModel.nameMuStr = attributedText;
dispatch_group_leave(scriptProcessingGroup); // 富文本處理完成迅皇,離開組
}];
});
} else {
// 其他 script 處理邏輯
[self asyncMutiAttributeMerge:scriptProcessingGroup withGoodModel:goodsModel];
}
if (displayType == 4) {
goodsModel.priceTagImgUrl = scriptIconUrl;
}
}
}
} else {
// script 數(shù)據(jù)為空的處理邏輯
[self asyncMutiAttributeMerge:scriptProcessingGroup withGoodModel:goodsModel];
}
} else {
// script 不是數(shù)組的處理邏輯
[self asyncMutiAttributeMerge:scriptProcessingGroup withGoodModel:goodsModel];
}
}
// 3. 合并兩個任務(wù)組的處理結(jié)果
dispatch_group_t finalGroup = dispatch_group_create();
dispatch_group_enter(finalGroup); // 合并圖片組
dispatch_group_notify(picDownloadGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_group_leave(finalGroup);
});
dispatch_group_enter(finalGroup); // 合并 script 組
dispatch_group_notify(scriptProcessingGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_group_leave(finalGroup);
});
// 4. 等待兩個組完成,計算最終高度
dispatch_group_notify(finalGroup, dispatch_get_main_queue(), ^{
for (YJGGoodsModel *goodModel in goods) {
goodModel.newCellHeight = [self getCellHeight:goodModel];
}
[self.goodsView confire:self.homeModel];
});
iOS oc dispatch_group 多個異步事件處理完時間后执隧,在做統(tǒng)一處理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門尖飞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宛官,你說我怎么就攤上這事葫松。” “怎么了底洗?”我有些...
- 文/不壞的土叔 我叫張陵腋么,是天一觀的道長。 經(jīng)常有香客問我亥揖,道長珊擂,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任费变,我火速辦了婚禮摧扇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挚歧。我一直安慰自己扛稽,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布滑负。 她就那樣靜靜地躺著在张,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矮慕。 梳的紋絲不亂的頭發(fā)上帮匾,一...
- 文/蒼蘭香墨 我猛地睜開眼橡类,長吁一口氣:“原來是場噩夢啊……” “哼蛇尚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猫态,我...
- 正文 年R本政府宣布善炫,位于F島的核電站,受9級特大地震影響库继,放射性物質(zhì)發(fā)生泄漏箩艺。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一宪萄、第九天 我趴在偏房一處隱蔽的房頂上張望艺谆。 院中可真熱鬧,春花似錦拜英、人聲如沸静汤。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽虫给。三九已至,卻和暖如春排监,著一層夾襖步出監(jiān)牢的瞬間狰右,已是汗流浹背杰捂。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- dispatch_queue_t queue = dispatch_get_global_queue(DISPAT...
- dispatch_group中都是同步事件情況例如任務(wù)3需要在任務(wù)1和任務(wù)2執(zhí)行結(jié)束以后(任務(wù)1.2是并發(fā)執(zhí)行的)...
- 一. dispatch_group_t 用法 1. dispatch_group_t 執(zhí)行同步操作 運行,打印...
- (一)、多個網(wǎng)絡(luò)請求的同步問題 解決1:通過添加標(biāo)識來判斷請求是否全部結(jié)束用一個finishedCount變量記錄...
- 在最近工作中瓤漏,由于種種原因腾夯,經(jīng)常碰到這樣一個需求:在顯示一個界面之前颊埃,需要同時從多個接口獲取數(shù)據(jù),對全部的數(shù)據(jù)進(jìn)行...