之前验证过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重点是怎么引的。。类似文章似乎不多。