美文网首页
iOS当用weak来修饰block时,会发生什么?

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

作者: Masazumi柒 | 来源:发表于2017-10-31 00:25 被阅读0次

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

    相关文章

      网友评论

          本文标题:iOS当用weak来修饰block时,会发生什么?

          本文链接:https://www.haomeiwen.com/subject/hmrvpxtx.html