Objetive-C學習_Block學習筆記,objetive-c_block

來源:互聯網
上載者:User

Objetive-C學習_Block學習筆記,objetive-c_block

 

Block : 帶有自動變數(局部變數)的匿名函數。

Block作用 : 用來儲存一段代碼,可以在適當的時候調用

Block實質 : 結構體,其裡面有一個函數指標

Block應用情境 : 動畫、多線程、集合遍曆、網路請求回調

Block格式 : ^傳回值類型 參數列表 {運算式}  (如果傳回值類型為void和參數列表為空白時是可以省略不寫的)

 

Block與函數的對比 :

聲明  函數類型 : int ( * funcptr )(int);

聲明Block類型 : int (^ blk)(int);

函數使用typedef  :  typedef  int  (^blk_t) (int);使用的時候就直接使用blk_t

Block使用typedef : typedef int (* funcptr) (int);賦值的時候是用函數的地址funcptr func = &addTen;

例子 blk_t blt = ^int (int a){//傳回值一般不寫,參數列表是要有()

            return 4;

        };

 

截取自動變數值 : Block截獲所使用的自動變數的值,不使用的是不會截獲的。即儲存該自動變數的瞬時值,在執行Block的文法後,即使改寫Block中使用的自動變數的值也不會影響Block執行時自動變數的值。

代碼 :

(1)int a = 10;

        blk_t block = ^ {

            NSLog(@"%d",a);

        };

        a = 100;

        block();//列印之後的結果是10而不是100

              (2)Person * p = [[Person alloc]init];

        p.name = @"張三";

        blk_t block = ^ {

           //擷取的是地址,並不是對象的本身

            NSLog(@"%@",p.name);

            [p1 release];

        };

        p.name = @"李四";

        [p release];

        p = nil;

        block();

    } // [Person name]: message sent to deallocated instance 0x100300170

 

知識點和注意點 :

(1)   預設情況下,block不能修改外面的局部變數(基礎資料型別 (Elementary Data Type)),除非在前面加__Block

(2)   Block文法運算式中使用的局部變數被作為成員變數追加到Block所在的結構體中

(3)  Block可以作為函數的參數,調用Block之前一定要判斷,Block可以為nil

(4)   使用Block的時候最好使用typedef

(5)   如果擷取的是引用的話,是可以修改對象的屬性的,不要加__Block也是可以修改的

(6)   在block中使用retain好像沒有效果,但是使用release是可以的

 

相關文章

聯繫我們

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