一、什麼是block
block是oc中的乙個資料型別,但是它很特別,因為它是用來儲存一段**的(可以理解為把一段**賦值給block型別的變數)。它和函式有點相似,它可以帶引數,可以有返回值,呼叫方式也一樣。
二、定義乙個不帶形參沒有返回值的block
//
// main.m
// block
//// created by 葬花 橋 on 14-5-13.
//#import int main()
; myblock(); // 呼叫block
三、帶引數有返回值的block
//
// main.m
// block
//// created by 葬花 橋 on 14-5-13.
//#import int main();//
// myblock(); // 呼叫block
int (^sumblock)(int, int) = ^(int a, int b);
int c = sumblock(1, 2); // 呼叫block
nslog(@"sumblock返回值為%d",c);
return 0;
}
三、block與函式指標
block與函式指標是非常相似的,小橋在這裡演示一下:
//
// main.m
// block
//// created by 葬花 橋 on 14-5-13.
//#import int sum(int a, int b)
int main()
上面的指標p就是乙個指向函式的指標,函式指標在c語言中用的比較多,特別是linux系統核心中,c語言用結構體並且在結構體中用函式指標來模擬類的方法,用以達到物件導向的效果,所以說物件導向程式設計是一種思想而不是一種特定的程式語言,這是題外話。
如果用block來寫同樣的求和功能,是這樣的:
int sum(int a, int b)
int main()
; nslog(@"sumblock返回值為%d", sumblock(4, 5));
四、block與typedef
複雜型別可以用typedef來定義簡潔的形式,這在c++的視覺化程式設計的mfc框架中經常見到,一些奇怪的資料型別其實是已知型別的另一種形式。
typedef把block的定義重新定義成乙個簡潔的形式,如:
int sum(int a, int b)
typedef int (*sump)(int, int); // 定義乙個sump型別,它可以定義出乙個返回值為int,兩個int形參的函式指標
typedef int (^myblock)(int, int); // 定義乙個myblock型別,它可以定義出乙個返回值為int,兩個int形引數的block變數
int main()
; nslog(@"sumblock返回值為%d", sumblock(4, 5));
sump p2 = sum; // 定義乙個函式指標p2
所以,如果需要多個block,返回的都是int,引數都是兩個int,那麼就可以用typedef定義的myblock型別繼續定義多個block變數,功能可以不一樣,可以是兩個int的加,減,除等等。這樣做可以減少**量,小橋覺得主要還是在**上增加可讀性,我們對
inta;這種形式很熟悉,但是對
int(^sumblock)(
int,
int)
這種形式就不那麼熟悉了,所以用typedef定義後的
myblock sumblock2;
就變成我們熟悉的語法了。
OC學習筆記(1) block
斷斷續續,今天又開始學oc了 今天的內容是 block block 是用來儲存一段 block 的標記是 block 和 其它語言的函式很像 1.可以儲存 2.有返回值 3.有形參 4.呼叫方式一樣 定義 block 變數的方法如下 void myblock int c sumblock 10,20...
OC學習筆記十 Block與 protocol
block是一種資料型別,封裝了一段 可以在任何時候執行。block 可以在程式執行時儲存一段 函式不行 block 跟函式一樣,有返回值,形參。block 以 表示一段 block block變數 以 返回值型別 block 名稱 形參型別 表示乙個 block 型別的變數。和以前學過的 c語言的...
Oc課堂筆記 Block塊
block塊 可以傳到任何地方使用 託字元 1.無返回值 無引數的block void myblock myblock 2.有返回值有引數 nsinteger sumblock nsinteger,nsinteger nsinteger num1,nsinteger num2 sumblock 10...