栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java接口和Objective-C协议之间的区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java接口和Objective-C协议之间的区别?

首先,从Java的一位创建者那里对该主题进行了一些历史性的展望。接下来,维基百科在Objective-
C协议中
提供了适度有用的部分。特别要了解的是,Objective-
C支持 正式协议 (使用

@protocol
关键字明确声明,相当于Java接口)和 非正式协议
(仅一个或多个由类实现的方法,可以通过反射来发现)。

如果您采用正式协议(“实现接口”的Objective-C术语),则编译器将针对未实现的方法发出警告,就像您在Java中所期望的那样。 与Java不同(如skaffman所述),如果Objective-C类实现了正式协议中包含的方法,则即使它的接口未明确采用它,也可以说它“符合”该协议。您可以在代码中测试协议一致性(使用-conformsToProtocol:),如下所示:

if ([myObject conformsToProtocol:@protocol(MyProtocol)]) {    ...}

注意:Apple
文档说明:

“如上所述,该方法仅根据头文件中的形式声明来确定一致性。它不检查协议中声明的方法是否被实际实现,这是程序员的责任。”

从Objective-C 2.0(在OS X 10.5“ Leopard”和iOS中)开始,正式协议现在可以定义 可选方法
,并且一个类只要实现所有必需的方法,就符合该协议。您可以使用

@required
(默认)和
@optional
关键字来切换是否 必须
可以 将后面的方法声明实现为符合协议。(请参阅Apple的Objective-C
2.0编程语言指南,该节讨论了可选的协议方法。)

可选的协议方法为开发人员提供了很大的灵活性,特别是对于实现 委托侦听器
。您可以采用协议并仅实现您关心的可选方法,而不是扩展诸如MouseInputAdapter之类的东西(由于Java也是单继承性,这可能会很烦人),或者实现许多毫无意义的空方法。使用这种模式,调用方会在调用该方法之前检查该方法是否已实现(使用-respondsToSelector),如下所示:

if ([myObject respondsToSelector:@selector(fillArray:withObject:)]) {    [myObject fillArray:anArray withObject:foo];    ...}

如果反射的开销成为问题,则始终可以缓存布尔结果以供重用,但可以避免过早优化的冲动。:-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号