根据苹果:
当您使用修饰符标记成员声明时
dynamic
,始终动态调度对该成员的访问。因为使用dynamic
修饰符标记的声明是使用 Objective-C 运行时调度的,所以它们被隐式标记为@objc
属性。
根据维基百科:
动态分派是选择在运行时调用哪个多态操作(方法或函数)实现的过程。
当不同的类由于共同的继承而包含相同方法的不同实现时,动态分派通常用于面向对象的语言中。例如,假设您有类
A
、B
和C
,其中B
和都从C
继承方法。现在假设是一个变量 class 。在运行时,实际上可能有一个类型的值,或者通常你在编译时不知道它是什么。foo()
A
x
A
x
B
C
现在,我正在研究 依赖注入框架:Typhoon ,当我在从 Objective-C 类继承的所有类中打开Swift的示例项目时,所有TyphoonAssembly
注入依赖关系的方法都具有以下dynamic
修饰符:
public dynamic func weatherReportDao() -> AnyObject {
return TyphoonDefinition.withClass(WeatherReportDaoFileSystemImpl.self)
}
我以为我遗漏了一些东西,但我不明白在这里运行时要调用的多态操作(方法或函数)在哪里。
这里动态调度的目的是什么?