首页 > 代码库 > GCD同步问题
GCD同步问题
现在许多iOS初学者在图片加载请求一块总是依赖第三方插件,表面上我们是省去了很多工作,但是遇到一点问题,可能我们花了10倍的时间去钻牛角尖,本人在iOS这一块,主力推荐在苹果框架的基础上做一些封装,这样的东西可能是我们更喜欢的东西,她完全可以胜任目前的许多工作,而且你的能力会比用三方库成长很多,孩子先学会自立,再学者去善假于物也。
回归正题,iOS这一块多线程我们一般采用GCD,但用了GCD时,我们往往忘了与主线程同步,图片总是等很久才刷出来,代码来看一下。
1 NSString *fileMD5Name = [EncryptionUtils getMd5_16Bit_String:leftTeacherItem.imgUrl]; 2 NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp"]; 3 __block NSData *data =http://www.mamicode.com/ [NSData dataWithContentsOfFile:[filePath stringByAppendingPathComponent:fileMD5Name]]; 4 5 if(data){ 6 cell.leftTeacherSingleView.imgvwIco.image = [UIImage imageWithData:data]; 7 } 8 else{ 9 if(tableView.dragging==NO&&tableView.decelerating==NO){ 10 dispatch_async(dispatch_get_global_queue(0, 0), ^{ 11 data =http://www.mamicode.com/ [NSData dataWithContentsOfURL:[NSURL URLWithString:leftTeacherItem.imgUrl]]; 12 if(data){ 13 [data writeToFile:[filePath stringByAppendingPathComponent:fileMD5Name] atomically:YES]; //this async main 14 dispatch_async(dispatch_get_main_queue(), ^{ 15 cell.leftTeacherSingleView.imgvwIco.image = [UIImage imageWithData:data]; 16 }); 17 18 } 19 else{ 20 //loading default img 21 cell.leftTeacherSingleView.imgvwIco.image = [UIImage imageNamed:@""]; 22 } 23 }); 24 } 25 else{ 26 //loading default img 27 } 28 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。