objective-c代碼塊多併發objective-c
1.代碼塊對象是對C語言中函數的擴展,除了函數中的代碼,代碼塊還包含有變量綁定,代碼塊有時也被稱爲閉包數組
2.代碼塊包含兩種綁定類型,自動綁定使用的是棧空間,託管綁定使用的是對空間多線程
3.代碼塊不屬於ansi的c語言標準閉包
4.代碼塊特徵以下 1.返回類型能夠手動聲明也能夠編譯器自動推導,具備指定類型的參數列表 ,擁有名稱,代碼塊的實例以下併發
void (^代碼塊名稱)(參數類型 參數);函數
5.代碼塊的實現以下atom
void (^代碼塊名稱)(參數類型 參數) = ^代碼塊名稱spa
{線程
代碼塊實現orm
}
6.代碼塊只有在定義的時候才須要^符號,在使用的時候能夠當成通常函數來使用
7.代碼塊能夠訪問與他同時建立的有效變量
8.使用typedef關鍵字能夠簡化代碼塊定義
typedef double (^代碼塊名)(參數列表)
而後就能夠 代碼塊名 代碼塊實例 = ^(參數列表){實現}
9.代碼塊能夠訪問函數用到的標準類型的變量,包括本地變量,全局變量,參數變量和_block變量,代碼塊內部的本地變量
10.本地變量被代碼塊獲取是做爲常量被獲取的,也就是說不能修改值,要是想修改值的話,必須將他們聲明爲可修改的_block
11.部分變量不能被聲明爲block的,包括長度可變的數組,包含長度可變數組的結構體
12.蘋果引入了GCD技術實現系統級別的線程管理
13.@synchronization能夠對代碼進行臨界區保護
14.若是定義了一個屬性沒有指定關鍵字nonatomic,編譯器自動生成的getset方法是互斥的,能夠使用@nonatomic關鍵字指定互斥級別
15.想讓一段代碼在後臺執行能夠使用NSObject的performSelectorInBackground:withObject方法
16.在後臺執行的方法不能帶返回值,要麼只有一個參數,要麼沒有參數
17.oc的調度隊列分爲三種,分別是連續隊列,併發隊列,主隊列,連續隊列按照fifo原則進行,併發隊列按照優先級執行,可是一次運行的任務量是不肯定的,能夠指定併發隊列的三個優先級分別是high low default,若是想得到優先級,使用dispatch_get_global_queue方法,獲得的結果分別是DISPATCH_QUEUE_PROORITY_HIGH DISPATCH_QUEUE_PROORITY_LOW DISPATCH_QUEUE_PROORITY_DEFAULT
18.獲取當前隊列 dispatch_get_current_queue
19.隊列的調度最好使用的是代碼塊
20.關於多線程的事情後期補充