首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时操纵行为意味着什么?

在运行时操纵行为意味着什么?
EN

Stack Overflow用户
提问于 2018-11-27 19:48:26
回答 2查看 160关注 0票数 0

我已经了解到,使用objective的消息分发系统,您可以在运行时操纵行为,例如在runtime.But中操作方法、swizzling甚至创建类--在运行时更改行为实际上意味着什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-27 20:50:46

它主要意味着两件事--类及其实现是在运行时定义的。

方法

目标C采用动态调度。调用方法时,运行库实际上发送消息(通过一系列objc_msgSend函数),并在类方法表中查找相应的方法。即使没有为类实现方法,目标-C的动态特性允许通过重写resolveInstanceMethod:forwardingTargetForSelector:forwardInvocation:方法来处理或重定向消息。您甚至可以使用class_addMethod函数在运行时添加一个方法,或者使用方法-swizzling方法(method_exchangeImplementations函数)交换两种方法的现有实现。

由于Objective的动态特性,您不仅可以更改方法,还可以添加/设置/删除类的属性和ivars。您甚至可以使用object_setClass函数在运行时更改实例的类。

有更多的方法显示出目标的全部动态力量-C。有关如何使用它们的更多详细信息,您可以参考目标-C运行时页面

票数 3
EN

Stack Overflow用户

发布于 2018-11-27 19:50:31

Objective除了按照您的预期运行代码之外,还为您提供了在运行时操作它的行为的许多可能性。基本上,您可以从头创建一个类,并在应用程序运行时向它添加一些方法/属性,或者更改现有选择器 - (也称为方法swizzling )的实现。

顺便说一下,您可以在这里找到更多信息:

https://docs.swift.org/swift-book/LanguageGuide/AdvancedOperators.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53507076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档