@protocol vs Class Cluster

Mar*_*aev 3 cocoa cocoa-touch objective-c ios

什么是那些主要的禁忌用于@protocol类集群在Objective-C概念?

它们都在程序架构中引入了松散耦合.它们在概念上几乎是平等的,还是还有其他值得知道的东西?

Ste*_*ani 6

警告:不是可可亲,但我不相信他们是平等的.

使用Class Clusters进行子类化.

类集群是Foundation框架广泛使用的设计模式.类集群在公共抽象超类下组合了许多私有具体子类.以这种方式对类进行分组简化了面向对象框架的公开可见体系结构,而不会降低其功能丰富性.类集群基于"可可设计模式"中讨论的抽象工厂设计模式.

@protocols 另一方面,更像是Java接口.

称为协议的Objective-C扩展非常类似于Java中的接口.两者都只是发布任何类可以选择实现的接口的方法声明列表.协议中的方法由其他类的实例发送的消息调用.

简而言之,Class Clusters是子类/超类,其子类符合超类的整个标识,因此可以向用户隐藏实现.NSArray在编译器使用上下文选择要使用的最佳数据结构类型的情况下,这是显而易见的.你不会在Java中打电话NSTreeNSLinkedList喜欢你.你可以看到如何NSNumber这里实现,它说,特别是部分:

// NSNumber实例方法 - 永远不会被调用...

@protocols类似于客户端/服务器关系,其中客户端类采用服务器类的协议,因此服务器可以调用客户端上的功能. <NSAppDelegate>并且<UIAlertViewDelegate>是使用协议的很好的例子.

  • 是的 - 你可能会觉得这很有趣:http://cs.gmu.edu/~sean/stuff/java-objc.html (3认同)