美文网首页
关于协议(protocol)、代理(delegate)、bloc

关于协议(protocol)、代理(delegate)、bloc

作者: wenny_Liu | 来源:发表于2016-12-02 17:56 被阅读40次

    协议和代理:
    ①协议是一个方法列表,并且里面的方法多少是相关的
    ②协议中声明的方法默认是必须实现的,@required 当然还有选择实现的 @optional
    ③协议通常和代理(delegate)搭配使用,即协议声明需要实现的代理方法,代理去实现协议声明的方法
    ④代理是一对一的回调机制,代理对象实现协议对象,并且需要建立代理关系才能进行通信

    协议在发出代理请求的类的.h文件中声明(有A类和B类两个类,A想让B帮忙做一些事情,则B就是A的代理,A来声明要做的事情,B来实现A所要求的事情),在代理类的.m文件中实现。

    A.h A.m B.h B.m

    其中,A类.h文件中,@property(nonatomic,weak)id<FirstDelegate> delegate; 要使用weak修饰词,weak不会使引用计数+1,防止循环引用造成内存泄露。

    Block:
    ①一对一的回调机制,更加简洁
    ②当回调时间比较多时,建议使用代理
    ③无论当前环境是ARC还是MRC,只要block没有访问外部变量,block始终在全局区
    ④在ARC情况下,block如果访问外部变量,block在堆里;block可以使用copy和strong,block是一个对象
    ⑤如果要在block中直接使用外部强指针会发生错误,使用以下代码在block外部实现可以解决
    __weak typeof(self) weakSelf = self;
    但是如果在block内部使用延时操作还使用弱指针的话会取不到该弱指针,该指针已经被销毁,需要在block内部再将弱指针强引用一下
    __strong typeof(self) strongSelf = weakSelf;

    相关文章

      网友评论

          本文标题:关于协议(protocol)、代理(delegate)、bloc

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