美文网首页
网络层的回调为什么不建议使用Block

网络层的回调为什么不建议使用Block

作者: YasinWei | 来源:发表于2016-06-20 00:04 被阅读0次

    在IOS开发过程中,多数人在网络请求的过程中都习惯将请求成功后的回调设置为Block,这样做在写代码时虽然简单了很多,但其暗藏的缺点也不容小视。

    1.block很难追踪,难以维护

    我们在调试的时候经常会单步追踪到某一个地方之后,发现尼玛这里有个block,如果想知道这个block里面都做了些什么事情,这时候就比较蛋疼了。

    2.block会延长相关对象的生命周期

    block会给内部所有的对象引用计数加一,这一方面会带来潜在的retain cycle,不过我们可以通过Weak Self的手段解决。另一方面比较重要就是,它会延长对象的生命周期。

    在网络回调中使用block,是block导致对象生命周期被延长的其中一个场合,当ViewController从window中卸下时,如果尚有请求带着block在外面飞,然后block里面引用了ViewController(这种场合非常常见),那么ViewController是不能被及时回收的,即便你已经取消了请求,那也还是必须得等到请求着陆之后才能被回收。

    然而使用delegate就不会有这样的问题,delegate是弱引用,哪怕请求仍然在外面飞,,ViewController还是能够及时被回收的,回收之后指针自动被置为了nil,无伤大雅。

    相关文章

      网友评论

          本文标题:网络层的回调为什么不建议使用Block

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