局部變量 ? ?copy ? 以后的修改不會改變block ?因為是copy
static 局部變量,? __block NSObject* blockObj? 以后的修改會改變block? 因為是地址引用
1、局部變量
局部自動變量橘荠,在Block中只讀屿附。Block定義時copy變量的值,在Block中作為常量使用哥童,所以即使變量的值在Block外改變挺份,也不影響他在Block中的值。
{
int base = 100;
long (^sum)(int, int) = ^ long (int a, int b) {
return base + a + b;
};
base = 0;
printf("%ld\n",sum(1,2));
// 這里輸出是103贮懈,而不是3, 因為塊內(nèi)base為拷貝的常量 100
}
2全局 , static 局部變量,? __block NSObject* blockObj //修改的地址
int base = 100;//全局
{
static int base = 100; // static 局部變量
__block int base = 100;// __block NSObject* blockObj
long (^sum)(int, int) = ^ long (int a, int b) {
base++;
return base + a + b;
};
base = 0;
printf("%ld\n",sum(1,2));
// 這里輸出是4匀泊,而不是103, 因為base被設(shè)置為了0
printf("%d\n", base);
// 這里輸出1, 因為sum中將base++了
}