GCD

来源:互联网 发布:poi数据 编辑:程序博客网 时间:2024/04/18 14:56

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];          });      });

原创粉丝点击