Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @协议与类集群_Objective C_Cocoa_Cocoa Touch_Ios - Fatal编程技术网

Objective c @协议与类集群

Objective c @协议与类集群,objective-c,cocoa,cocoa-touch,ios,Objective C,Cocoa,Cocoa Touch,Ios,在Objective-C中,@协议和概念的主要赞成和反对意见是什么 它们都引入了程序体系结构。他们在概念上几乎是平等的,还是还有什么值得知道的?警告:不是可可专业人士,但我不相信他们是平等的 用你的子类 类簇是基础框架广泛使用的一种设计模式。类集群将许多私有的具体子类分组到公共抽象超类下。以这种方式对类进行分组简化了面向对象框架的公共可见体系结构,而不会降低其功能丰富性。类集群基于“Cocoa设计模式”中讨论的抽象工厂设计模式 另一方面,它们更像Java接口 称为协议的Objective-C扩展

在Objective-C中,
@协议
和概念的主要赞成和反对意见是什么


它们都引入了程序体系结构。他们在概念上几乎是平等的,还是还有什么值得知道的?

警告:不是可可专业人士,但我不相信他们是平等的

用你的子类

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

另一方面,它们更像Java接口

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

简而言之,类集群是子类/超类,其中子类符合超类的整个标识,因此可以对用户隐藏实现。这在
NSArray
的情况下很明显,编译器使用上下文来选择要使用的最佳数据结构类型。您不会像在Java中那样调用
NSTree
NSLinkedList
。您可以看到
NSNumber
的内容,尤其是其中的部分:

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


@协议类似于客户机/服务器关系,其中客户机类采用服务器类的协议,因此服务器可以调用客户机上的功能<代码>和是协议使用的好例子。

回答得好!Java非常直接地从Objective-C派生而来,但是@protocol是在Java之后产生的,目的是捕获一个类似Java的接口。(IIRC)。@bbum,我不知道Java是从Obj-C派生的。向强类型的转变改变了OOP的大部分内容。是的——你可能会发现这很有趣:@bbum,这真的很酷。现在我要向所有认为Obj-C低劣或无用的Java人展示一些东西。@Stephen感谢您的解释,尤其是purefoundation项目链接@bbum:非常棒的Obj-C和Java历史之旅!