协议(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
网友评论