block代碼塊中若想改變外部變量的值需要在外部變量錢面加__block.
需注意如果只是在塊內修改了變量谈竿,外部沒有調用這個block,此時在外部打印這個變量時還是其原來的值疫向。
- (void)block {
__block int x? = 5;// 在變量前面加了__block
int (^block2)(int) = ^(int y){
x=6;//這里允許對該變量進項修改 此時 X 的值為6
NSLog(@"%d",x);
int z = x + y;
return z;
};
block2(4);//如果不調用 block 下邊打印的 X 的值還是5(調用此方法時 將這行代碼注釋掉众辨,加上分別運行一次就看出來了)
//block代碼塊中可以對__block修飾的變量修改,但是修改的值僅限于 block 代碼塊內部,因為在給block賦值的時候,已經(jīng)對代碼塊里的變量做了值的拷貝
NSLog(@"%d,%d",x,block2(4));
}
PS:不明白其中的內部原理耕挨,如果哪位大神看到的話望補充告知O肝浴尉桩!謝謝!L懊怼蜘犁!