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

2019-10-12  本文已影响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的操作,在代理回调中指回主线程就好了。

上一篇 下一篇

猜你喜欢

热点阅读