局部变量 <> 全局 , static 局部变量, __block NSObject* blockObj

局部变量    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, 因为块内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被设置为了0

printf("%d\n", base);

// 这里输出1, 因为sum中将base++了

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Block基础和retain cycle(循环引用) blcok简介 Block 是c语言的扩展,并不是什么高新技...
    董军1990阅读 12,347评论 22 69
  • 使用block已经有一段时间了,感觉自己了解的还行,但是几天前看到CocoaChina上一个关于block的小测试...
    心愿2016阅读 355评论 0 0
  • Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是...
    qui丶MyLove阅读 443评论 0 0
  • Blocks Blocks Blocks 是带有局部变量的匿名函数 截取自动变量值 int main(){ ...
    南京小伙阅读 982评论 1 3
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,790评论 0 23