美文网首页
协议&代理&委托

协议&代理&委托

作者: Kevin_wzx | 来源:发表于2017-04-19 14:18 被阅读19次

    协议(protocol)

    协议类似于Java和C#中的接口,它表示:
    约定:遵循协议的类必须实现协议中规定的那些方法
    能力:一个类遵循某种协议,它就具备了协议中所描述的能力
    角色:一个类可以遵循多个协议,一个协议也可以被多个类遵循(就像一个演员可以扮演多个角色,一个角色也可以由多个演员扮演)

    补充:iOS中代理属性为什么要用weak修饰?
    http://www.jianshu.com/p/661a01405802
    特点:协议是一组方法的集合,协议中只有方法的声明,没有方法的实现;因为这些方法是留给遵循该协议的类做出多态实现的方法。毫无关系的类可以遵循相同的协议从而具有相同的行为,这是自然的,就如同超人、鸟、飞机都会飞,但是他们其实没有什么必然的关联,我们可以把飞这个行为定义到一个协议中

    Demo:

    屏幕快照 2017-04-19 上午11.59.14.png 屏幕快照 2017-04-19 上午11.59.20.png 屏幕快照 2017-04-19 下午12.00.01.png 屏幕快照 2017-04-19 下午12.00.12.png 屏幕快照 2017-04-19 下午12.00.19.png 屏幕快照 2017-04-19 下午12.00.40.png 屏幕快照 2017-04-19 下午12.00.50.png 屏幕快照 2017-04-19 下午12.00.59.png 屏幕快照 2017-04-19 下午12.01.18.png

    代理(delegate)

    用代理对象代理被代理对象的行为(比如:找枪手代考),代理对象可以通过被代理对象的指针执行被代理对象的行为,与此同时代理对象可以对这些行为进行增强实现。很多iOS开发者认为代理和委托是一个意思,其实二者是不同的两种设计理念。

    Demo:

    屏幕快照 2017-04-19 下午2.15.12.png 屏幕快照 2017-04-19 下午2.15.24.png 屏幕快照 2017-04-19 下午2.15.32.png 屏幕快照 2017-04-19 下午2.15.43.png 屏幕快照 2017-04-19 下午2.15.53.png 屏幕快照 2017-04-19 下午2.16.12.png

    委托回调

    屏幕快照 2017-04-19 下午2.12.58.png
    • 委托是什么?委托和委托方双方的property声明用什么属性?为什么?
      答:1.委托是一个对象保存另外一个对象的引用,被引用的对象实现了事先确定的协议,该协议用于将引用对象中的变化通知给被引用对象
      2.委托和委托方双方的property声明属性都是assign而不是retain,为了避免循环引用造成的内存泄露

    Demo:


    屏幕快照 2017-04-19 下午2.20.54.png 屏幕快照 2017-04-19 下午2.21.04.png 屏幕快照 2017-04-19 下午2.21.13.png 屏幕快照 2017-04-19 下午2.21.20.png 屏幕快照 2017-04-19 下午2.21.28.png 屏幕快照 2017-04-19 下午2.21.35.png 屏幕快照 2017-04-19 下午2.21.42.png 屏幕快照 2017-04-19 下午2.21.50.png
    补充:
    1.协议和通知的区别?

    答案:协议有控制链(has-a)的关系,通知没有。首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。

    2.protocol 和delegate(协议和代理)的区别

    http://www.cnblogs.com/36bian/p/5240517.html
    http://blog.csdn.net/mad1989/article/details/8463460

    3.如何选择NSNotification和KVO和delegate?

    http://blog.csdn.net/dqjyong/article/details/7685933
    http://www.jianshu.com/p/f819abf40509
    https://www.zybuluo.com/SanMao/note/125908

    相关文章

      网友评论

          本文标题:协议&代理&委托

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