iOS当用weak来修饰block时,会发生什么?

之前验证过copy修饰的block,编译器做了什么。详见文章通过__block的作用深入研究block
与内存有关的常用修饰关键字有retain,strong,copy,weak,有盛传前三者作用都一样,是将栈中的block复制到堆中。而且很多人不建议用weak修饰block,而且关于weak block的文章也甚少。
半夜想到这点,突然好奇心起!
那么就写个demo验证了下。

我家🐱都睡了,不能修仙了,改天再详细列一下验证步骤,先说结论。

weak修饰block正如你所想,block在使用过之后就会释放掉(正如那烟火~)
被广大IOS开发所畏惧的weakblock的坑在哪里呢?
用过即毁~
被释放掉的block会带来什么不良影响呢?
如果在block中调用了控制器或者其他不需要释放不能释放的控件或者其他对象,那就真是爽歪歪了。要注意的是,不能够释放的对象不能出现在block的作用域内。不然会被误杀的哦。
weak修饰的block又能做什么呢?
weakblock用来传值还是可以的,就是那种基础数据类型啦~基本数据类型是无所谓的。或者回调过来调用数据持久化储存数据也是极好。
weak修饰的block的意义?
大概是内存优化吧。比如要传很多数值的时候,但是又必须在某个控制器的回调内进行处理的时候,传值过来就可以销毁,回收内存。恩,大概是这样。
(等有时间补一下探究的代码。
(再有时间的时候,在研究研究为什么在weakblock内调用wekself都能够被误杀。(其实也大致能猜到啦~毕竟block和self都是在栈内的,就算是weakself最终指向的也是self,销毁的时候引火上身了hhh重点是怎么引的。。类似文章似乎不多。

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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 1.1 局部变量 局部自动变量,在Block中可被读取。Block定义时copy变量的值,在Block中作为常量使...
    陈雨尘阅读 2,957评论 4 31
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,375评论 2 26
  • 写作的意义,在李笑来的专栏文章里,对其重要性,已经说得很清楚: 写作是“把自己的同一段时间重复销售很多很多次”的极...
    黄虎阅读 440评论 4 18
  • 冬日午后的阳光洒满了我的小阳台,木质花架上是一些多肉植物,说不上美,但在暖暖的日光里,能让我忘了窗外的寒风与...
    梨子酱欧尼阅读 207评论 0 0