Object C中Block用法

先了解定義C語言的函數指針!函數

 1 int sum (int x, int y) {
 2 return x+ y;
 3 }
 4 // 定義函數
 5 int (*p)(int, int) = sum;
 6 NSLog(@"%ld", p(2, 5));
 7 
 8 // 函數指針類型: int (*)(int, int);
 9 // 函數指針變量: p;
10 // 函數指針的值: sum

 

看看block語法學習

1  block類型: int(^)(int, int)  
2  block變量: block
3  block值: ^(int x, int y){ 
4   return x + y ;
5 };

 

定義block語法塊spa

1 int (^block) (int , int) = ^(int x, int y) {
2 return  x + y;
3 }
4 NSLog(@"%d", block(3, 5));

 

效果和上邊的函數指針同樣! 參照起來學習方便!指針

  • 無返回值, 無參數 block 語法code

    1 void(^block1)(void) = ^(void) {
    2   NSLog(@"無返回值, 無參數");
    3   }  
    4   // 調用block1
    5   block1();

     

  • 有返回值, 無參數
    1 int(^block2)(void) = ^(void) {
    2   return 1;
    3   }
    4   NSLog(@"有返回值, 無參數%d",  block2());

     

  • 無返回值, 有參數
    1 void (^block3)(int, int) = ^(int x, int y){
    2 NSLog(@"%d + %d = %d", x, y, x +y);
    3 };
    4 調用
    5 block3(3, 5);

     

  • 有返回值, 有參數
    1 int (^block4)(int , int) = ^(int x, int y) {
    2 return x + y;
    3 }
    4 block 調用
    5 NSLog(@"%d", block4(3, 5));

     

block 與變量的關係
  • block 與 局部變量的關係
    1 int temp = 100;
    2 void (^block1)(void) = ^(void) {
    3 NSLog(@"%d", temp++);
    4 NSLog(@"%d", temp + 1);
    5 }

     

    調用 block1();
    若是按照以上代碼, 第一個打印會報錯!! 由於對temp進行了操做, 也就是說在block中是不能修改局部變量的值的! 而第二個打印卻不會報錯, 說明block中能夠調用局部變量! 那怎樣才能在block中修改局部變量的值呢?
    1 __block int temp2 = 200; 用__block修飾一下變量, 便在block能夠使用了
    2 __block int temp2 = 200;
    3 void (^block9) (void) = ^(void){
    4   temp2++; // 這樣就能夠修改了! 
    5   };
    6  調用 block9();  
    7  結果 201;

     

  • block與全局變量.
    1 在main函數外定義一個在main函數外定義一個temp3 = 300;
    2 void (^block11) (void) = ^(void){
    3  temp3++;
    4  NSLog(@"temp3 = %d", temp3 + 1);
    5 };    
    6 調用 block11();
    7 結果 temp3 = 301;

     


    說明block中能夠修改全局變量!



文/安靜的等待(簡書做者) 原文連接:http://www.jianshu.com/p/abb1eafeb068 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索