iOS - 在 Swift 中,我们是 "send a message"还是 "call method/function"?

标签 ios objective-c swift

Swift 是在编译时保留方法查找列表还是在特定内存位置调用函数?

最好的问候。

关于此:http://davedelong.tumblr.com/post/58428190187/an-observation-on-objective-c

最佳答案

我建议您查看以下链接,尤其是第一个,因为它通过 C++ 和 Objective-C 的示例解释了概念,以便更好地理解静态、延迟和动态调度之间的区别(对于方法)。

简而言之:

静态调度

函数及其实现在编译时确定,因此不会在运行时失败(因为除非绑定(bind)成功,否则编译器不会继续编译过程)。

延迟发送

函数在编译时确定,但实际实现取决于运行时对象的类型。对继承很重要。编译器将检查类或其任何父类是否声明了函数,但由运行时选择使用哪个实现。后期绑定(bind)可以像 C++ 一样使用虚拟表来实现。

动态调度

该函数是在运行时确定的,在 Objective-C 的情况下可以按名称调用,因此如果接收者(对象)未实现或继承可以响应指定消息的方法,则可能会在运行时失败.

引用资料

关于iOS - 在 Swift 中,我们是 "send a message"还是 "call method/function"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937421/

相关文章:

ios - 如何在 Swift 中注册 UndoManager?

ios - 如何使用 AppleScript 删除 plist 键

ios - 电子邮件/密码按钮 Firebase

ios - 如何使用 AFNetworking 缓存文件下载?

xcode - swift : Error with ParseUI and utf16Count not present

swift - 根据 uitextfield 中的信息,使用相同的按钮对两个不同的 viewController 执行 segue

ios - Outlets 无法连接重复内容 iOS 5

ios - 你如何让一个应用程序只支持风景?

objective-c - 检测添加的 subview 的框架原点何时位于状态栏后面

ios - 如何使用dismissViewController发回数据