Objective-C - 代碼塊block

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.