[iOS] Obnjective-C 中的 __block 是什麼意思

來源:互聯網
上載者:User

標籤:blog   http   io   os   ar   sp   2014   art   on   

__block 的標記告訴編譯器,這個變數在 block 裡面需要做特殊處理。


一般來說,在 block 中用的變數值是被複製過來的,所以對於變數本身的修改並不會影響這個變數的真實值。而當我們用 __block 標記的時候,表示在 block 中的修改對於 block 外也是有效地。


具體可參見 https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html ,這是蘋果官方對於 block 的解釋。


接下來我們看一個例子:


extern NSInteger CounterGlobal;static NSInteger CounterStatic;{    NSInteger localCounter = 42;    __block char localCharacter;    void (^aBlock)(void) = ^(void) {        ++CounterGlobal;        ++CounterStatic;        CounterGlobal = localCounter; // localCounter fixed at block creation        localCharacter = ‘a‘; // sets localCharacter in enclosing scope    };    ++localCounter; // unseen by the block    localCharacter = ‘b‘;    aBlock(); // execute the block    // localCharacter now ‘a‘}


在上面的代碼裡,localConter 和 localCharacter 都在 block 中有所修改,但是在 block 裡面,只有 localCharacter 的修改是有效,原因是 __block 標記起了作用。而在 block 中對於 localCharacter 的修改在 block 外也是可見的。


[iOS] Obnjective-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.