在日常开发中往往有这种需求,在后台下载大文件,前台主线程展示进度,或者说达成一定条件后(等待数据返回)再继续下一步。
或者是我需要递归循环多少次,但是需要递归的效率可控。
你可能马上会想到开辟一个线程用来数据下载或者递归,在主线程更新
-(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的操作,在代理回调中指回主线程就好了。
网友评论