iOS學習-9,ios-9
來自李明傑的視頻。
block 用來儲存一段代碼
block 的標誌:^
block 跟函數很像:
1).可以儲存代碼 2).有傳回值 3). 有形參
temp1:沒有傳回值、沒有形參的 block
如果 block 沒有形參,可以省略 ()
void(^myblock)() = ^{ NSLog(@"----------"); NSLog(@"----------"); }; // 利用 block 變數調用 block 內部的代碼 myblock();
temp2:有傳回值,有形參
int (^sumblock)(int,int) = ^(int a,int b){ return a+b; }; //傳回值 int c = sumblock(1,1); NSLog(@"%d",c);
temp 3:用一個 block 輸出 n 條橫線
void (^lineblock)(int) = ^(int n){ for (int i = 1; i < n; i++) { NSLog(@"-------"); } }; //無傳回值,加 int 類型的參數 lineblock(5);
temp 4:
__block int a = 10; void (^block)(); block = ^{ /* block 內部可以訪問外面的變數 預設情況下,block 內部不能修改外面的局部變數 給局部變數加上 __block 關鍵字,這個局部變數就可以在block內部修改 */ a = 20; NSLog(@"%d",a); }; block();
temp 5:使用 typedef 定義 block 類型
// 類型 + 變數 MyBlock sumBlock; sumBlock = ^(int a,int b){ return a+b; }; sumBlock(10,9); //減法 MyBlock minusBlock; minusBlock = ^(int a,int b){ return a - b; }; minusBlock(10,9); //乘法 MyBlock multipBlock; multipBlock = ^(int a,int b){ return a * b; }; multipBlock(10,9); //除法 MyBlock divideBlock; divideBlock = ^(int a,int b){ return a / b; }; divideBlock(10,2); NSLog(@"\n %d \n %d \n%d \n %d",sumBlock(10,9),minusBlock(10,9), multipBlock(10,9),divideBlock(10,2));
總結:
1.如何定義 block 變數
int (^sumBlock)(int,int);void (^myBlock)();
2.如何利用 block 封裝代碼
^(int a,int b){ return a - b; }; //沒有參數 ^(){ NSLog(@"-----"); } //沒有傳回值 ^{ NSLog(@"-----"); }
3. block 訪問外面變數
1.block 內部可以訪問外面的變數2.預設情況下,block 內部不能修改外面的局部變數
3.給局部變數加上 __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; };