美文网首页
面试题:delegate和block区别?

面试题:delegate和block区别?

作者: 常在士心 | 来源:发表于2021-05-13 16:40 被阅读0次

1、从源头上理解和区别block和delegate

delegate运行成本低,block的运行成本高。
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除。delegate只是保存了一个对象指针,直接回调,没有额外消耗。就像C的函数指针,只多做了一个查表动作。

2、从使用场景区别block和delegate

有多个相关方法。假如每个方法都设置一个 block, 这样会更麻烦。而 delegate 让多个方法分成一组,只需要设置一次,就可以多次回调。当多于 3 个方法时就应该优先采用 delegate。当1,2个回调时,则使用block。

3、安全性。

delegate更安全些,比如: 避免循环引用。使用 block 时稍微不注意就形成循环引用,导致对象释放不了。这种循环引用,一旦出现就比较难检查出来。而 delegate 的方法是分离开的,并不会引用上下文,因此会更安全些

相关文章

网友评论

      本文标题:面试题:delegate和block区别?

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