美文网首页
iOS 如何控制循环或递归时间

iOS 如何控制循环或递归时间

作者: 鹏雨燕 | 来源:发表于2019-10-12 11:44 被阅读0次

    在日常开发中往往有这种需求,在后台下载大文件,前台主线程展示进度,或者说达成一定条件后(等待数据返回)再继续下一步。

    或者是我需要递归循环多少次,但是需要递归的效率可控。

    你可能马上会想到开辟一个线程用来数据下载或者递归,在主线程更新

    -(void)load{
    dispatch_queue_t q = dispatch_queue_create("bletest", DISPATCH_QUEUE_SERIAL);// 新建个线程,注意是串行队列,不然会开辟线程的,我们这里讨论的是单线程处理
    
    [self recursive:q]; //来个无限递归
    }
    
    -(void) recursive:(dispatch_queue_t)q{
        dispatch_async(q, ^{
            usleep(50000);
            self->stamp ++;
            
            if([[testObject shareInstance].testDelegate respondsToSelector:@selector(delegatePrint:)]) {
                NSLog(@"in loop1%@",[NSThread currentThread]);
                
                [[testObject shareInstance].testDelegate delegatePrint:[NSString stringWithFormat:@"stamp = %d",self->stamp]];
                
            }
            [self recursive:q];
        });
    }
    

    这样就创建了一个节流限速线程了,更新ui的操作,在代理回调中指回主线程就好了。

    相关文章

      网友评论

          本文标题:iOS 如何控制循环或递归时间

          本文链接:https://www.haomeiwen.com/subject/xrwiyctx.html