標籤:objective 代碼塊block 封裝
代碼塊block
/* block要掌握的東西 1> 如何定義block變數 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封裝代碼 ^(int a, int b) { return a - b; }; ^() { NSLog(@"----------"); }; ^ { NSLog(@"----------"); }; 3> block訪問外面變數 * block內部可以訪問外面的變數 * 預設情況下,block內部不能修改外面的局部變數 * 給局部變數加上__block關鍵字,這個局部變數就可以在block內部修改 4> 利用typedef定義block類型 typedef int (^MyBlock)(int, int); // 以後就可以利用MyBlock這種類型來定義block變數 MyBlock block; MyBlock b1, b2; b1 = ^(int a, int b) { return a - b; }; MyBlock b3 = ^(int a, int b) { return a - b; }; */typedef int (*SumP)(int, int);typedef int (^MyBlock)(int, int);int sum(int a, int b){ return a + b;}int main(){ // int (*p)(int, int) = sum; // int (*p2)(int, int) = sum; // SumP p = sum; // SumP p2 = sum; /* int (^sumBlock)(int, int); sumBlock = ^(int a, int b) { return a + b; }; int (^minusBlock)(int, int) = ^(int a, int b) { return a - b; };*/ MyBlock sumBlock; sumBlock = ^(int a, int b) { return a + b; }; MyBlock minusBlock = ^(int a, int b) { return a - b; }; MyBlock multiplyBlock = ^(int a, int b) { return a * b; }; NSLog(@"%d - %d - %d", multiplyBlock(2, 4), sumBlock(10 , 9), minusBlock(10, 8)); return 0;}void test3(){ int a = 10; __block int b = 20; void (^block)(); block = ^{ // block內部可以訪問外面的變數 //NSLog(@"a = %d", a); // 預設情況下,block內部不能修改外面的局部變數 // a = 20; // 給局部變數加上__block關鍵字,這個局部變數就可以在block內部修改 b = 25; }; block();}// 有傳回值、有形參的blockvoid test2(){ /* // 指標函數的指標 int (*p)(int, int) = sum; int d = p(10, 12); NSLog(@"%d", d); */ int (^sumblock)(int, int) = ^(int a, int b){ return a + b; }; int c = sumblock(10, 11); // 用一個block輸出n條橫線 void (^lineBlock)(int) = ^(int n) { for (int i = 0; i<n; i++) { NSLog(@"----------------"); } }; lineBlock(5);}// 沒有傳回值、沒有形參的blockvoid test(){ // block用來儲存一段代碼 // block的標誌:^ /* block跟函數很像: 1.可以儲存代碼 2.有傳回值 3.有形參 4.調用方式一樣 */ // 定義block變數 /* void (^myblock)() = ^(){ NSLog(@"----------------"); NSLog(@"----------------"); };*/ // 如果block沒有形參,可以省略後面的() void (^myblock)() = ^{ NSLog(@"----------------"); NSLog(@"----------------"); }; // 利用block變數調用block內部的代碼 myblock(); myblock();}
Objective-C - 代碼塊block