簡單理解Objective-C中的Block

來源:互聯網
上載者:User

標籤:

類似於js裡面的閉包,java中的匿名函數,C#的委託,可以將func當做參數傳遞:

1.Block的聲明

            Block的定義和函數的聲明差不多,就是把函數名改成(^blockName)即可。下面是block聲明的代碼。

 有傳回值的

int (^sumBlock) (int, int);

 無傳回值的 

void (^myBlock)(int, int);

2.給block塊賦值

        給聲明好的block,賦值。block的值就是個函數體,給block塊賦值有兩種方式,一個在聲明的時候賦值,一個是先聲明在賦值。

先聲明再賦值

//代碼塊的聲明void (^myBlock)(int, int); //給代碼塊賦值myBlock = ^(int a, int b){    //test ++;  //報錯    NSLog(@"main_test = %d", test);     //blockVar++不報錯;    blockVar ++;    NSLog(@"blockVar = %d", blockVar);     int sum = a + b;    NSLog(@"a + b = %d", sum);};

在聲明的時候賦值

int (^sumBlock) (int, int) = ^(int a, int b){    int sum = a + b;    return sum;};

3.調用block 

block的使用和普通函數的使用相同,調用方法如下:

//調用代碼塊並接收傳回值int sum = sumBlock(20, 30);

4.把block當做參數傳入函數

//把代碼塊作為函數參數void blockFunction(int (^myBlock)(int, int)){    int sum = myBlock(10,20);    NSLog(@"fun_sum = %d", sum);}  

5.在代碼塊中使用局部變數和全域變數

在block中可以和對全域變數進行訪問和修改,但對局部變數只可以訪問,若想修改的話,我們可以在聲明局部變數的時候加上關鍵字__block

代碼如下

__block int blockVar = 0;

 

簡單理解Objective-C中的Block

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.