在运行时操作行为是什么意思?

时间:2018-11-27 19:48:26

标签: ios objective-c dynamic-programming

我了解到,使用目标C的消息分发系统可以在运行时操纵行为,例如方法混乱,甚至在运行时创建类。但这实际上意味着在运行时更改行为是什么意思?

2 个答案:

答案 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