溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

[iOS開發(fā)]推翻錯誤結(jié)論——“Block可以捕獲它的聲明所在相同作用域的狀態(tài)?!?/h1>
發(fā)布時間:2020-04-10 15:26:07 來源:網(wǎng)絡(luò) 閱讀:669 作者:developerPan 欄目:移動開發(fā)

最近看block,覺著好神奇。

尤其是block可以捕獲自動變量值特性,簡直是大殺器啊。

那么捕獲的究竟是何時的自動變量呢?

各大技術(shù)博客與技術(shù)書籍統(tǒng)一口徑:Block可以捕獲它的聲明所在相同作用域的狀態(tài)。

真的是這樣嗎?

且跟我來試一試。


代碼:

- (void)viewDidLoad

{

   int val=0;

   void (^blk)(NSInteger);  //聲明block類型變量

   val = 1;               //在定義前重新賦值。

   blk=^(NSInteger a){

       NSLog(@"截獲的val:%d",val);

       return;

   };

   val = 2;                //定義后,調(diào)用前重新賦值。

   blk(val);


}

聲明前val=0;

聲明后定義前val=1;

定義后調(diào)用前val=2;

打印出來的結(jié)果是什么呢??


2013-12-27 18:30:14.182 Test[2594:70b] 截獲的val:1



所以得出結(jié)論:

Block可以捕獲它的定義所在相同作用域的狀態(tài)。而不是所謂的聲明所在相同域的狀態(tài)。

查閱蘋果官方文檔。

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Blocks/Articles/bxOverview.html#//apple_ref/doc/uid/TP40007502-CH3-SW3

[iOS開發(fā)]推翻錯誤結(jié)論——“Block可以捕獲它的聲明所在相同作用域的狀態(tài)?!?></p><ul class=

  • Can capture state from the lexical scope within which it is defined

  • (Block)可以捕獲它的定義所在相同作用域的狀態(tài)。

    沉冤昭雪……


    為什么網(wǎng)上會統(tǒng)一口徑說捕獲的是聲明所在相同作用域呢?

    順藤摸瓜發(fā)現(xiàn)網(wǎng)上有人將這份關(guān)于block的蘋果官方文檔翻譯成了中文…

    翻譯的還挺好的,就是這一句翻譯錯了……錯將定義翻譯成了聲明(或者是不小心,或者是聲明和定義概念沒有搞清楚)

    一傳十十傳百,關(guān)于block的諸多資料都是由這份錯誤翻譯的文檔演變而來的…

    悲傷的是到現(xiàn)在還沒有人來為其正名…

    百度關(guān)于Block捕獲的是何時的作用域清一色的全是錯誤結(jié)論……

    [iOS開發(fā)]推翻錯誤結(jié)論——“Block可以捕獲它的聲明所在相同作用域的狀態(tài)?!?></p><p >坑爹呢這是?。?/p><p ><br /></p><p >正確結(jié)論:</p><p>Block<span >捕獲的應(yīng)該是它的</span><span ><strong><span >定義</span></strong></span><span >所在相同作用域的狀態(tài)。而不是所謂的聲明所在相同域的狀態(tài)。</span></p><div>大家對于網(wǎng)上的資料不要盲信,一要自己去試,二要警惕翻譯錯誤挖的坑。</div>
													            </div>
            <div   id=向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI