当前位置: 首页 > 面试题库 >

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

程化
2023-03-14
问题内容

我知道Java,现在正在学习Objective-C。Java接口和Objective-C协议之间到底有什么区别?


问题答案:

首先,从Java的一位创建者那里对该主题进行了一些历史性的展望。接下来,维基百科在Objective-
C协议中
提供了适度有用的部分。特别要了解的是,Objective-
C支持 正式协议 (使用@protocol关键字明确声明,相当于Java接口)和 非正式协议
(仅一个或多个由类实现的方法,可以通过反射来发现)。

如果您采用正式协议(“实现接口”的Objective-C术语),则编译器将针对未实现的方法发出警告,就像您在Java中所期望的那样。 与Java不同(如 skaffman所述),如果Objective-C类实现了正式协议中包含的方法,则即使它的接口未明确采用它,也可以说它“符合”该html" target="_blank">协议。 您可以在代码中测试协议一致性(使用-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];
    ...
}

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



 类似资料:
  • Objective-C允许定义协议,声明预期用于特定情况的方法。 协议在符合协议的类中实现。 一个简单的例子是网络处理类,它将具有一个协议,其中包含委托方法等方法,当网络URL提取操作结束,就会调用类。 协议的语法如下所示 - 关键字下的方法必须在符合协议的类中实现,并且关键字下的方法是可选的。 以下是符合协议的类的语法 - 的任何实例不仅会响应接口中特定声明的方法,而且还会为中的所需方法提供实现

  • 本文向大家介绍1G和2G协议之间的区别,包括了1G和2G协议之间的区别的使用技巧和注意事项,需要的朋友参考一下 1G和2G是两代手机。1G代表第一代,2G代表第二代。 以下是1G和2G之间的重要区别。 序号 键 1G 2G 1 定义 1G代表第一代。它在美国带来了无线通信。 2G代表第二代,在美国带来了语音和数字通信。 2 交换 1G使用电路交换。 2G同时使用电路交换和分组交换。 3 互联网 在

  • 本文向大家介绍说明停止和等待协议与滑动窗口协议之间的区别,包括了说明停止和等待协议与滑动窗口协议之间的区别的使用技巧和注意事项,需要的朋友参考一下 停止和等待协议 停止和等待协议是流控制机制的协议。在此协议中,发送方一次发送一个帧,并等待接收方的确认。确认后,发送方将另一个帧发送给接收方。 滑动窗口协议 停止和等待协议也是流控制机制的协议。在此协议中,发送方一次发送多个帧,然后重新发送被发现已损坏

  • 问题内容: 通过在Swift 2.0中添加协议扩展,似乎协议基本上已经成为Java / C#抽象类。我可以看到的唯一区别是抽象类仅限于单个继承,而Swift类型可以符合任何数量的协议。 这是对Swift 2.0中协议的正确理解,还是有其他区别? 问题答案: 有几个重要的区别… 协议扩展可以与值类型以及类一起使用。 值类型是结构和枚举。例如,你可以扩展到增加财产所有整数类型(,,等)。或者,您可以将

  • 本文向大家介绍iOS开发:Objective-C中通知与协议的区别?相关面试题,主要包含被问及iOS开发:Objective-C中通知与协议的区别?时的应答技巧和注意事项,需要的朋友参考一下 what is difference between NSNotification and protocol? (通知和协议的不同之处?) 我想大家都知道这个东西怎么用,但是更深层次的思考可能就比较少了吧,众

  • 本文向大家介绍Java中Runnable和Callable接口之间的区别,包括了Java中Runnable和Callable接口之间的区别的使用技巧和注意事项,需要的朋友参考一下 可运行和可调用两个功能接口。实现这些接口的类设计为由另一个线程执行。 可以使用Ruunable启动线程,这是启动新线程的两种方法:一种是通过子类化Thread类,另一种是实现Runnable接口。 线程类没有可调用的构造