异步处理4 GCD

作者: Dayu大鱼 | 来源:发表于2016-07-16 00:07 被阅读71次

    异步处理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

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