登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

关于GCD使用group异步加载图片的问题 [复制链接]

2017-8-22 11:38
panshuyan112 阅读:445 评论:4 赞:1
Tag:  

关于GCD使用group异步加载图片的问题


  • 我的目的是:想给某一个ImageView添加一个转圈,单个ImageView循环异步调用sd_setImageWithURL进行图片的缓存,在所有的图片加载完成之后将转圈的视图隐藏。------但是效果不尽然:单张或者两张图片的时候dispatch_group_notify 会走,但是三张或者更多就不走了。(HELP求解)

我的代码如下:

dispatch_group_t group = dispatch_group_create();
        __block NSInteger successNum = 0;
        for (int i = 0; i < _PSY3D_ImageDataSource.count ; i++) {
            
            dispatch_group_enter(group);
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [self.imageView sd_setImageWithURL:_PSY3D_ImageDataSource[i] placeholderImage:[UIImage imageNamed:@"u=1421326615,2887060665&fm=206&gp=0"] options:SDWebImageRefreshCached progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
                    
                    dispatch_async(dispatch_get_main_queue(), ^{
                        _myHud.progress = (float)receivedSize/expectedSize;
                    });
                    
                    NSLog(@"sdjasfjkahfsa 加载进度:%ld 完成进度:%ld myHud.progress = %f",receivedSize,expectedSize,_myHud.progress);
                    
                } completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
                    dispatch_group_leave(group);
                    successNum++;
                    VBLog(@"和大家说快点回家啊收到捐款撒谎的接口撒谎的");
                }];
            });
            
        }
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            VBLog(@"=======================%ld",successNum);
            if (successNum == _PSY3D_ImageDataSource.count) {
                _myHud.hidden = YES;
            }
        }); 

那么新的问题又来了,如果我能顺利的解决上面的问题,使用上面这种方法做,如果网络比较慢,进入界面后,我又退出来,但是请求已经发送了,结果还在占用CPU资源,如何解决呢?就是在退出界面的时候将所有的异步请求都取消掉??老司机带我飞

分享到:
我来说两句
facelist
您需要登录后才可以评论 登录 | 立即注册
所有评论(4)
panshuyan112 2017-8-31 10:08
怎么看呢您嘞?
回复
ccp_code4 2017-9-4 09:10
你这个group的用法 看不懂啊,貌似没有用到吧
回复
panshuyan112 2017-9-7 13:58
ccp_code4: 你这个group的用法 看不懂啊,貌似没有用到吧
用了的亲
回复
ccp_code4 2017-10-24 09:41
+ (void)groupTasks:(NSArray <NSString *> *)selNames target:(NSArray <id> *)targets queue:(dispatch_queue_t)queue complete:(void(^)(void))complete {
    dispatch_queue_t gp_queue = queue?:dispatch_get_main_queue();
    dispatch_group_t gp = dispatch_group_create();
    [selNames enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        SEL sel = NSSelectorFromString(obj);
        NSMethodSignature *sig = [NSMethodSignature methodSignatureForSelector:sel];
        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
        invocation.target = targets[idx];
        invocation.selector = sel;
        dispatch_group_async(gp, gp_queue, ^{
            dispatch_group_enter(gp);
            void(^complete)(id) = ^(id rsp){dispatch_group_leave(gp);};
            [invocation setArgument:&complete atIndex:2];
            [invocation invoke];
        });
    }];
    dispatch_group_notify(gp, gp_queue, ^{
        if (complete) {
            complete();
        }
    });
}
不是这么用的么?
回复
关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

返回顶部