2018-06-14

///第一种情况,不加block的情况,全局,静态,和局部变量的区别:
首先全局变量global_a和静态全局变量static_global_b的值增加,以及它们被Block捕获进去,这一点很好理解,因为是全局的,作用域很广,所以Block捕获了它们进去之后,在Block里面进行++操作,就像局部函数一样,可以成功修改全局变量的值,Block结束之后,它们的值依旧可以得以保存下来。自动变量是以值传递方式传递到Block的构造函数里面去的。Block只捕获Block中会用到的变量。由于只捕获了自动变量的值,并非内存地址,所以Block内部不能改变自动变量的值。Block捕获的外部变量可以改变值的是静态变量,静态全局变量,全局变量。

///第二种情况,加了__block 之后的情况:
对于非对象的类型:

__block 修饰的变量,生成了一个结构体A,结构体里面的变量a 的地址传进去block里面结构体的变量,所以block就可以改变变量a。(根本原因就是地址传递)
参考:https://www.jianshu.com/p/710026d5bcfb?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

对于对象的类型:
Block会对这样的对象进行retain,所以可能有循环引用的问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,211评论 0赞 2
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,913评论 0赞 23
  • 1 Block机制 (Very Good) Block技巧与底层解析 http://www.jianshu.com...
    Kevin_Junbaozi阅读 4,233评论 3赞 48
  • 热修复实现原理——MultiDex 一、 MultiDex 1、MultiDex 产生背景 当Android系统安...
    墨留痕阅读 598评论 0赞 1
  • Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一)。 Git有什么特点?简单来说就是:高端大...
    萧非子阅读 504评论 0赞 51

友情链接更多精彩内容