协议&代理&委托

协议(protocol)

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

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

Demo:

协议&代理&委托_第1张图片
屏幕快照 2017-04-19 上午11.59.14.png
协议&代理&委托_第2张图片
屏幕快照 2017-04-19 上午11.59.20.png
协议&代理&委托_第3张图片
屏幕快照 2017-04-19 下午12.00.01.png
协议&代理&委托_第4张图片
屏幕快照 2017-04-19 下午12.00.12.png
协议&代理&委托_第5张图片
屏幕快照 2017-04-19 下午12.00.19.png
协议&代理&委托_第6张图片
屏幕快照 2017-04-19 下午12.00.40.png
协议&代理&委托_第7张图片
屏幕快照 2017-04-19 下午12.00.50.png
协议&代理&委托_第8张图片
屏幕快照 2017-04-19 下午12.00.59.png
协议&代理&委托_第9张图片
屏幕快照 2017-04-19 下午12.01.18.png

代理(delegate)

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

Demo:

协议&代理&委托_第10张图片
屏幕快照 2017-04-19 下午2.15.12.png
协议&代理&委托_第11张图片
屏幕快照 2017-04-19 下午2.15.24.png
协议&代理&委托_第12张图片
屏幕快照 2017-04-19 下午2.15.32.png
协议&代理&委托_第13张图片
屏幕快照 2017-04-19 下午2.15.43.png
协议&代理&委托_第14张图片
屏幕快照 2017-04-19 下午2.15.53.png
协议&代理&委托_第15张图片
屏幕快照 2017-04-19 下午2.16.12.png

委托回调

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

Demo:


协议&代理&委托_第17张图片
屏幕快照 2017-04-19 下午2.20.54.png
协议&代理&委托_第18张图片
屏幕快照 2017-04-19 下午2.21.04.png
协议&代理&委托_第19张图片
屏幕快照 2017-04-19 下午2.21.13.png
协议&代理&委托_第20张图片
屏幕快照 2017-04-19 下午2.21.20.png
协议&代理&委托_第21张图片
屏幕快照 2017-04-19 下午2.21.28.png
协议&代理&委托_第22张图片
屏幕快照 2017-04-19 下午2.21.35.png
协议&代理&委托_第23张图片
屏幕快照 2017-04-19 下午2.21.42.png

协议&代理&委托_第24张图片
屏幕快照 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

你可能感兴趣的:(协议&代理&委托)