iOS block捕獲自動變數的值

2021-08-29 02:37:19 字數 302 閱讀 9658

int val = 10;

void (^blk)(void) = ^;

val = 2;

blk();

上面這段**輸出值是:val = 10,而不是2,block截獲自動變數的瞬時值。因為block儲存了自動變數的值,所以在執行block語法後,即使改寫block中使用的自動變數的值也不會影響block執行時自動變數的值。

嘗試改寫block中捕獲的自動變數,將會編譯錯誤。可以理解為:block捕獲的自動變數都將轉化為const型別,不可修改。

文章**: 感謝作者

c lambda 捕獲成員變數

void func vectorvint 昨天寫 的時候寫了類似如上的一段 這段 編譯未通過,報錯原因是this指標不可以隱式宣告。後來嘗試在方括號中填寫成員變數,比如 this m sum const int num 依然報錯。後來查閱資料,找到了這段 的正確寫法如下 void func vect...

ios block的作為引數

大家在學習block的時候,不會的人,會覺得block比較複雜,很難理解.尤其是在作為引數的時候.一般在實際使用的時候我們一般會遇到block的兩種方式,一種是 作為 成員變數 另一種是作為引數 初學者比較難理解的 我們會用一些比較簡單的方式進行理解.初學者如果不熟悉的話,可以使用inline ps...

自動變數與非自動變數

自動變數 區域性變數,如不作專門說明為靜態變數,都是動態分配儲存空間,儲存在動態儲存區中。這種變數叫自動變數。這種變數只在定義它們的時候才建立,在定義它們的函式返回時系統 變數所佔儲存空間。對這些變數儲存空間的分配和 是由系統自動完成的,所以也叫自動變數。一般情況下,不作專門說明的區域性變數,均是自...