异步处理4 GCD

异步处理4

-(void)bigTaskAction{
    [self.myActivityIndicator startAnimating];

  

//GCD支持名为代码队列的概念, 队列会呗调度以在下一个可用得处理器上执行,在使用GCD时,需要制定将代码放到哪个队列中,这里使用的是默认队列,默认队列也可用于后台处理,还可以使用朱队列,主队列类似于用具界面的主线程
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        int updateUIWhen=1000;
       
        for (int i=0;i<1000;i++) {
            NSString*newString=[NSString stringWithFormat:@"i=%i",i ];
            NSLog(@"%@ ",newString);
            if (i==updateUIWhen) {
                float f =(float)i/10000;
                NSNumber*percentDone=[NSNumber numberWithFloat:f];

                dispatch_sync(dispatch_get_main_queue(), ^{
                    
                    [self.myProcessView setProgress:[percentDone floatValue ]animated:YES];
                    
                });
                updateUIWhen=updateUIWhen+1000;
            }
        }
        dispatch_sync(dispatch_get_main_queue(), ^{
            
            [self.myProcessView setProgress:1.0 animated:YES];

            [self.myActivityIndicator stopAnimating];
        });
    });
    
}



//类比:可以看出来,计算的操作放在后台另外一个进程中去计算,主线程主要用来大体的运行



之前加锁和开辟线程,现在用gcd一个就可以完成,并且使用函数dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 这是个会异步执行的GCD函数(跟开辟线程 和给线程枷锁 达到一个效果) 给线程枷锁这个步骤涵盖在函数:dispatch_sync(dispatch_get_main_queue(), ^{ 中, 刷新界面的操作代码放在主队列中进行

你可能感兴趣的:(异步处理4 GCD)