根据Apple的说法:
使用
dynamic
修饰符标记成员声明时,始终会动态调度对该成员的访问权限。因为使用Objective-C运行时调度标记有dynamic
修饰符的声明,所以它们会隐式标记为@objc
属性。
根据维基百科:
动态分派是选择在运行时调用多态操作(方法或函数)的实现的过程。
当不同的类由于公共继承而包含相同方法的不同实现时,动态分派通常用于面向对象的语言中。例如,假设您有类
A
,B
和C
,其中B
和C
都从{{继承foo()
方法1}}。现在假设A
是类x
的变量。在运行时,A
实际上可能具有x
或B
类型的值,并且通常您无法在编译时知道它是什么。
现在,我正在研究dependency injection框架:Typhoon,当我在从Objective-C类继承的所有类中打开Swift的示例项目时C
注入依赖项的所有方法亲属都以下列方式包含TyphoonAssembly
修饰符:
dynamic
我认为我遗漏了一些东西,但我不明白这里多态操作(方法或函数)在运行时调用。
这里动态调度的目的是什么?
答案 0 :(得分:5)
您的问题的答案在这篇文章中得到解决:
https://github.com/appsquickly/typhoon/wiki/TyphoonAssembly
基本上在运行时,Typhoon Framework将用自己的例程替换你的方法,该例程实现了框架的功能,并调用你的方法来完成你为它定义的任何工作。
为了使框架能够替换该方法,必须动态调度该方法。