iOS 单独创建一个协议文件(Protocol)的意义在哪里?
问题是 ,我们都知道 委托和代理是一种设计模式。那么问题来了,既然一个类中可以单独的写一个协议出来,像Category或者Extension 一样。可以直接在当前类里面写出来。当然单独创建出来也有用处。
但是一个单独创建协议的文件(Protocol)意义何在。是封装一些方法吗,还是干什么。如果是封装一些方法,继承自NSObject的类,好像没有什么东西可以触发让他在关键时候实现对象的方法,就算遵守了其他协议,那也没有实现啊,怎么调用。如果是定义一套标准出来,那这个标准意义在哪里哪,请求大牛,给我解惑!!万分感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是个面向对象的问题,协议是抽象的,只是描述不同事物的一些共性,比如说飞吧, 飞机和鸟都会飞,他们都实现了飞协议,但是他俩的实现方式是不一样的,那么飞这个协议是不是就应该单独定义呢?有一天可能人也会飞了,那么人去实现飞协议就可以了。
回到 iOS 里, 比如说 NSArray 实现了 NSFastEnumeration 协议, NSDictionary,NSSet 也都实现了 NSFastEnumeration 协议,虽然它们的实现方式是不一样的,但是它们都可以 fast enumeration,就跟飞机和鸟都会飞是一样的,当你需要一个可以 fast enumeration 的对象时,你就不用管它具体是 NSArray 还是 NSDictionary, 只要是一个服从 NSFastEnumeration 协议的对象即可。我想这大概就是你说的那套标准的意义吧。
Objective-c 面向对象的C, 继承概念体现在单类继承,用协议实现C++中的多类继承,避免一个子类继承多个父类时的复杂性,使类层次结构扁平。
比如车作父类,下面有两个子类燃油车和电动车,若需要混合动力车,按多父类继承,混合动力车需要继承两个父类,类层次为三层;但若是用协议方式,混合动力车实现燃油和电动协议,类层次只需要两层。
http://www.jianshu.com/p/ae7472664afc可以看下这个,我的理解是为了解耦