我了解到,使用目标C的消息分发系统可以在运行时操纵行为,例如方法混乱,甚至在运行时创建类。但这实际上意味着在运行时更改行为是什么意思?
答案 0 :(得分:3)
主要意味着两件事-类及其实现在运行时中定义。
Objective-C使用动态调度。调用方法时,运行时实际上会发送一条消息(通过objc_msgSend
函数系列),并在类方法表中查找相应的方法。即使未为类实现方法,Objective-C的动态性质也允许通过重写resolveInstanceMethod:
,forwardingTargetForSelector:
或forwardInvocation:
方法来处理或重定向消息。您甚至可以在运行时使用class_addMethod
函数添加一个方法,或使用方法混乱的方法(method_exchangeImplementations
函数)交换两种方法的现有实现。
借助Objective-C的动态特性,您不仅可以更改方法,还可以添加/设置/删除类的属性和ivars。您甚至可以使用object_setClass
函数在运行时更改实例的类。
还有更多方法可以揭示Objective-C的全部动态功能。您可以参考Objective-C Runtime page来详细了解如何使用它们。
答案 1 :(得分:0)
Objective-C除了可以按预期运行代码之外,还为您提供了许多在运行时操纵其行为的可能性。 基本上,您可以从头开始创建一个类,并在应用运行时为其添加一些方法/属性,或者更改现有选择器的实现。-也称为方法混乱。
通过这种方式,您可以在此处找到更多信息:
https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html