我已经了解到,使用objective的消息分发系统,您可以在运行时操纵行为,例如在runtime.But中操作方法、swizzling甚至创建类--在运行时更改行为实际上意味着什么?
发布于 2018-11-27 20:50:46
它主要意味着两件事--类及其实现是在运行时定义的。
方法
目标C采用动态调度。调用方法时,运行库实际上发送消息(通过一系列objc_msgSend函数),并在类方法表中查找相应的方法。即使没有为类实现方法,目标-C的动态特性允许通过重写resolveInstanceMethod:、forwardingTargetForSelector:或forwardInvocation:方法来处理或重定向消息。您甚至可以使用class_addMethod函数在运行时添加一个方法,或者使用方法-swizzling方法(method_exchangeImplementations函数)交换两种方法的现有实现。
类
由于Objective的动态特性,您不仅可以更改方法,还可以添加/设置/删除类的属性和ivars。您甚至可以使用object_setClass函数在运行时更改实例的类。
有更多的方法显示出目标的全部动态力量-C。有关如何使用它们的更多详细信息,您可以参考目标-C运行时页面。
发布于 2018-11-27 19:50:31
Objective除了按照您的预期运行代码之外,还为您提供了在运行时操作它的行为的许多可能性。基本上,您可以从头创建一个类,并在应用程序运行时向它添加一些方法/属性,或者更改现有选择器 - (也称为方法swizzling )的实现。
顺便说一下,您可以在这里找到更多信息:
https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html
https://stackoverflow.com/questions/53507076
复制相似问题