现在的位置: 首页 > 综合 > 正文

GCD

2013年02月21日 ⁄ 综合 ⁄ 共 1348字 ⁄ 字号 评论关闭

GCD大神的总结

Apple inc

1. 关于Block

  void (^loggerBlock)(void);   // 声明一个Block   
loggerBlock =^{  
//add your code  
} ; 

2、关于变量 

在block中可以使用定义程序块可以访问的变量,但此时Block中的变量只是定义程序块可以访问的变量的一个COPY ,若要共享定义程序块可以访问的变量,此时需要使用__block关键字对变量进行修饰,如: __block NSString *firstResult;  

3,使用dispatch_group_async把block加入到队列中运行
 dispatch_async(dispatch_get_global_queue(0, 0), ^{  
//add your code  
}); 

4、对于Block中的代码不能操作UI线程,否则就违背了线程安全原则,可以使用下面的方式对UI进行操作
 dispatch_async(dispatch_get_global_queue(0, 0), ^{  
          
        NSString *fetchedData =[self fetchSomeThingFromServer];  
        …………  
          
        dispatch_async(dispatch_get_main_queue(), ^{  
              //add your UI code  
        });  
    }

5、关于Block并发,使用dispatch_group_t,如下所示:

dispatch_async(dispatch_get_global_queue(0, 0), ^{  
          
        NSString *fetchedData =[self fetchSomeThingFromServer];  
        NSString *processedData = [self processData:fetchedData];  
  
          
        __block NSString *firstResult;  
        __block NSString *secondResult;  
          
        dispatch_group_t group = dispatch_group_create();  
        //处理并发1  
        dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{  
            firstResult = [[self calculateFirstResult:processedData] retain];  
        });  
        //处理并发1  
        dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{  
            secondResult = [[self calculateSecondResult:processedData] retain];  
        });  
          
        //dispatch_group_notify指定的是该组所有并发块执行完后执行的代码  
        dispatch_group_notify(group,dispatch_get_global_queue(0, 0),^{  
              
            NSDate *endTime =[NSDate date];  
            NSLog(@"%f------",[endTime timeIntervalSinceDate:startTime]);  
          
            [firstResult release];  
            [secondResult release];  
        });  
    });

抱歉!评论已关闭.