標籤:
objective-c代碼塊多並發
1.代碼塊對象是對C語言中函數的擴充,除了函數中的代碼,代碼塊還包含有變數綁定,代碼塊有時也被稱為閉包
2.代碼塊包含兩種綁定類型,自動綁定使用的是棧空間,託管綁定使用的是對空間
3.代碼塊不屬於ansi的c語言標準
4.代碼塊特徵如下 1.傳回型別可以手動聲明也可以編譯器自動推導,具有指定類型的參數列表 ,擁有名稱,代碼塊的執行個體如下
void (^代碼塊名稱)(參數類型 參數);
5.代碼塊的實現如下
void (^代碼塊名稱)(參數類型 參數) = ^代碼塊名稱
{
代碼塊實現
}
6.代碼塊只有在定義的時候才需要^符號,在使用的時候可以當成一般函數來使用
7.代碼塊可以訪問與他同時建立的有效變數
8.使用typedef關鍵字可以簡化代碼塊定義
typedef double (^代碼塊名)(參數列表)
然後就可以 代碼塊名 代碼塊執行個體 = ^(參數列表){實現}
9.代碼塊可以訪問函數用到的標準類型的變數,包括本地變數,全域變數,參數變數和_block變數,代碼塊內部的本地變數
10.本地變數被代碼塊擷取是作為常量被擷取的,也就是說不能修改值,要是想修改值的話,必須將他們聲明為可修改的_block
11.部分變數不能被聲明為block的,包括長度可變的數組,包含長度可變數組的結構體
12.蘋果引入了GCD技術實現系統層級的線程管理
[email protected]可以對代碼進行臨界區保護
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.關於多線程的事情後期補充
Objective-c學習筆記3