只執行一次 (多用於單例模式)
dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);
dispatch_once_t *predicate:一個全局的變量 dispatch_block_t block:block函數塊
多次執行
dispatch_apply(size_t iterations, dispatch_queue_t queue,void (^block)(size_t));
size_t iterations:執行次數 dispatch_queue_t queue:隊列 void (^block)(size_t):block函數塊
具體舉例如下:
1、只執行一次時:
//自定義一個block函數塊
//定義block
typedef void (^BLOCK)(void); //將執行代碼封裝到block中
BLOCK myBlock = ^(){ static int count = 0; NSLog(@"count=%d",count++); };
//執行dispatch_once函數
//myblock調用 //myBlock(); //myBlock(); //只會執行一次,GCD once
static dispatch_once_t predicate; dispatch_once(&predicate, myBlock); dispatch_once(&predicate, myBlock);
//運行結果:雖然執行兩次,只有一個輸出
2015-10-07 22:54:34.279 04-GCD-once[3501:278570] count=0
2、多次執行時:
//自定義一個block函數
//定義block
typedef void (^BLOCK)(size_t); //將函數封裝到block
BLOCK myBlock = ^(size_t size){ static int count = 0; NSLog(@"count=%d",count++); };
//執行dispatch_apply
//GCD多次執行任務
dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), myBlock);
//運行結果如下:執行了5次,有5個輸出
2015-10-07 22:57:59.438 05-GCD-apply[3528:280053] count=0
2015-10-07 22:57:59.438 05-GCD-apply[3528:280093] count=2
2015-10-07 22:57:59.438 05-GCD-apply[3528:280094] count=3
2015-10-07 22:57:59.438 05-GCD-apply[3528:280095] count=1
2015-10-07 22:57:59.439 05-GCD-apply[3528:280053] count=4