Objective-C學習筆記_Block

來源:互聯網
上載者:User

標籤:objective-c   ios   

一、Block文法

Block:塊文法,本質上是匿名函數(沒有名稱的函數),Block變數存放函數的實現,通過Block變數能直接調?函數。標準C裡面沒有Block,C語言的後期擴充版本,加?了匿名函數。C++、JS、Swift等語?,有類似文法,叫做閉包。Block文法和函數指標很相似。

  • Block類型:int (^)(int)
  • Block變數:myBlock
  • Block值:^ int (int num){ return 7 * num;}
  • 即:^ 傳回值類型 (參數列表){函數體} 其中 傳回值類型 可以省略。
        /* Block 類型: int (^)(int, int)         * Block 變數: block1         * Block 的值: ^int (int x, int y) { return x + y; };           ^ 傳回值類型 (參數列表) { 函數體 } (傳回值類型可以省略)         */        /* 1. 無傳回值, 無參數的Block */        void (^block3)() = ^()        {            NSLog(@"Hello, World!");        };        block3(); /* Block調用 */        /* 2. 無傳回值, 有參數 */        void (^block4)(int, int) = ^(int x, int y)        {            NSLog(@"%d", x + y);        };        block4(3, 45);        /* 3. 有傳回值, 無參數 */        int (^block5)() = ^()        {            return 100;        };        NSLog(@"%d", block5());        /* 4. 有傳回值, 有參數 */        int (^block6)(int, int) = ^(int x, int y)        {            return x > y ? x : y;        };        NSLog(@"%d", block6(3, 5));
二、Block使?
int (^block1)(int x, int y) = ^(int x, int y) {  return x + y;};int a = block1(32, 34);  // block的使?和函數指標的使用類似NSLog(@“%d”, a);  // 列印結果:66

Block進?typedef

  • typedef int (^BlockType)(int x, int y)

  • 原類型:int (^)(int x, int y)

  • 新類型:BlockType

/* Block typedef */typedef int(^blockType)(int, int);blockType block1 = ^(int x, int y) {            return x + y;        };NSLog(@"%d", block1(3, 5));

Block寫法

int (^block1)(int x, int y) = ^(int x, int y) {  return x + y;};
BlockType block1 = ^(int x, int y) {  return x + y;};

上述兩種實現是等價的。

Blcok與局部變數和全域變數

        /* main函數外定義的全域變數 */        int n = 100;        /* 知識點4 Block與局部變數 全域變數 */        /* 局部變數 */        int a = 100;        int (^block)() = ^() {            return a;        };        NSLog(@"%d", block());        int (^block2)() = ^() {//            a = 200;            return a;        };        /* 總結: 預設情況下, block可以訪問但不能更改局部變數 */        __block int b = 200;        int (^block3)() = ^() {            b = 300;            return b;        };        NSLog(@"%d", block3());        /* 總結: 用__block修飾的局部變數, Block裡面可以更改值 */        /* Block 與全域變數 */        int (^block4)() = ^() {            n = 200;            return n;        };        NSLog(@"n = %d", block4());        static int num = 1;        int (^block5)() = ^() {            num = 8;            return num;        };        NSLog(@"num = %d", block5());

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.