问题是 ,我们都知道 委托和代理是一种设计模式。那么问题来了,既然一个类中可以单独的写一个协议出来,像Category或者Extension 一样。可以直接在当前类里面写出来。当然单独创建出来也有用处。
但是一个单独创建协议的文件(Protocol)意义何在。是封装一些方法吗,还是干什么。如果是封装一些方法,继承自NSObject的类,好像没有什么东西可以触发让他在关键时候实现对象的方法,就算遵守了其他协议,那也没有实现啊,怎么调用。如果是定义一套标准出来,那这个标准意义在哪里哪,请求大牛,给我解惑!!万分感谢!
這是個面向對象的問題,協議是抽象的,只是描述不同事物的一些共性,比如說飛吧, 飛機和鳥都會飛,他們都實現了飛協議,但是他倆的實現方式是不一樣的,那麼飛這個協定是不是就應該單獨定義呢?有一天可能人也會飛了,那麼人去實現飛協議就好了。
回到iOS 裡, 例如NSArray 實現了NSFastEnumeration 協議, NSDictionary,NSSet 也都實現了NSFastEnumeration 協議,雖然它們的實現方式是不一樣的,但是它們都可以fast enumeration,就跟飛機和鳥都會飛是一樣的,當你需要一個可以fast enumeration 的物件時,你就不用管它具體是NSArray 還是NSDictionary, 只要是一個服從NSFastEnumeration 協定的物件即可。我想這大概就是你說的那套標準的意義吧。
Objective-c 物件導向的C, 繼承概念體現在單類別繼承,用協定實作C++中的多類別繼承,避免一個子類別繼承多個父類別時的複雜性,使類別層次結構扁平。
例如車作父類,下面有兩個子類燃油車和電動車,若需要混合動力車,按多父類繼承,混合動力車需要繼承兩個父類,類層次為三層;但若是用協議方式,混合動力車實現燃油和電動協議,類層次只需要兩層。
http://www.jianshu.com/p/ae7472664afc可以看下這個,我的理解是為了解耦