ios 重溫多線程 總結

1>不管使用哪一種方法進行多線程開發,每一個線程啓動後並不必定當即執行相應的操做,具體何時由系統調度(CPU空閒時就會執行)。web

2>更新UI應該在主線程(UI線程)中進行,而且推薦使用同步調用,經常使用的方法以下:多線程

  • - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait (或者-(void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL) wait;方法傳遞主線程[NSThread mainThread]) 閉包

  • [NSOperationQueue mainQueue] addOperationWithBlock:併發

  • dispatch_sync(dispatch_get_main_queue(), ^{}) 異步

3>NSThread適合輕量級多線程開發,控制線程順序比較難,同時線程總數沒法控制(每次建立並不能重用以前的線程,只能建立一個新的線程)。spa

4>對於簡單的多線程開發建議使用NSObject的擴展方法完成,而沒必要使用NSThread。.net

5>可使用NSThread的currentThread方法取得當前線程,使用 sleepForTimeInterval:方法讓當前線程休眠。線程

6>NSOperation進行多線程開發能夠控制線程總數及線程依賴關係。orm

7>建立一個NSOperation不該該直接調用start方法(若是直接start則會在主線程中調用)而是應該放到NSOperationQueue中啓動。對象

8>相比NSInvocationOperation推薦使用NSBlockOperation,代碼簡單,同時因爲閉包性使它沒有傳參問題。

9>NSOperation是對GCD面向對象的ObjC封裝,可是相比GCD基於C語言開發,效率卻更高,建議若是任務之間有依賴關係或者想要監放任務完成狀態的狀況下優先選擇NSOperation不然使用GCD。

10>在GCD中串行隊列中的任務被安排到一個單一線程執行(不是主線程),能夠方便地控制執行順序;併發隊列在多個線程中執行(前提是使用異步方法),順序控制相對複雜,可是更高效。

11>在GDC中一個操做是多線程執行仍是單線程執行取決於當前隊列類型和執行方法,只有隊列類型爲並行隊列而且使用異步方法執行時才能在多個線程中執行(若是是並行隊列使用同步方法調用則會在主線程中執行)。

12>相比使用NSLock,@synchronized更加簡單,推薦使用後者。

 

資源來於:http://blog.csdn.net/shenjie12345678/article/details/44152605

相關文章
相關標籤/搜索