iOS:GCD技術——僅僅執行一次和執行多次 dispatch_once和dispatch_apply


只執行一次  (多用於單例模式)

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM