为什么代理要用weak?
答:因为使用weak是弱引用,外部可以释放对象。指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。如果使用strong对象保持delegate对象造成循环引用,对象无法释放内存泄漏。
代理的delegate和dataSource有什么区别?
delegate偏重于用户交互的回掉。dataSource偏重于数据的回调。
block和代理的区别?
“代理和block的共同特性是回调机制,不同的是,代理的方法比较多,比较分散。
使用block的代码比较集中统一。”
代理的好处:
delegate运行成本低。block成本很高的。
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;delegate只是保存了一个对象指针,直接回调,没有额外消耗。相对C的函数指针,只多做了一个查表动作