Effective Objective-C 2.0重讀筆記---2

來源:互聯網
上載者:User

標籤:style   blog   color   使用   io   資料   for   ar   

1. 很多時候我們需要保證讀寫資料的安全性,這時候最好不要使用@synchronized同步塊,因為同步塊中的代碼必須單獨執行,這有可能會使當前的代碼等許多無關的代碼執行完畢才能繼續執行,降低程式運行效率。此外還有NSLock ,NSRecursiveLock這些鎖,但是這些鎖也應該少用,

最好的辦法就是用GCD隊列保證資料的安全性,而且GCD基於XUN核心,提供了很多底層最佳化

dispatch_queue_t serialQ = dispatch_queue_create("testGCDQueue",DISPATCH_QUEUE_SERIAL);        dispatch_barrier_async(serialQ, ^{            // safe        });
dispatch_queue_t serialQ = dispatch_queue_create("testGCDQueue",DISPATCH_QUEUE_SERIAL);        dispatch_barrier_sync(serialQ, ^{            // safe        });

如果塊中的代碼量比較少,你會發現asyn居然比syn慢,這是因為asyn需要拷貝塊,但是當塊裡面邏輯運算負責的時候據要看具體情況了

保證資料安全一般是在set和get方法裡,所以一般而且資料是允許多讀單寫的

如果使用並發隊列,可以再set裡面使用syn在get裡面使用asyn,但是讀寫有可能會交叉進行,所以這樣不是很安全

GCD裡面提供了一種柵欄塊,這種塊會等之前的任務塊全部執行完畢以後再執行,而柵欄塊之後的塊需要等到柵欄塊執行完畢之後才執行,這樣便能提高安全性還能並發執行

 dispatch_barrier_async(cerialQ, ^{            // safe        });

 

2.performSelector系列方法在記憶體管理方面有所疏漏,他無法確定將要執行的選擇自具體是什麼,因而ARC編譯器也就無法插入適當的記憶體管理方法

而且Per還有很大局限性,per所能實現的功能GCD或者operation都能實現

 

3.dipatch_group機制可以將隊列分組,調用者可以獲悉這組任務何時執行完畢

dispatch_group_t group = dispatch_group_create();long b = dispatch_group_wait(group, DISPATCH_TIME_FOREVER);        NSLog(@"111111Hello, World!%ld",b);         // NSLog(@"Hello, World!%ld",a);        dispatch_sync(queue1, ^{            for (int i = 0 ; i< 10000 ;i++) {                NSLog(@"cccccccc");            }            NSLog(@"ququeee1");        });        NSLog(@"3333333Hello, World!%ld",b);

上面的代碼是建立一個dispatch_group,等待queue1執行,DISPATCH_TIME_FOREVER是永遠等待執行,如果是永遠等待,wait函數會返回0.,如果不是DISPATCH_TIME_FOREVER,而是一個數,如果這個數小於執行的執行時間則返回非0.否則返回0

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.