【问题标题】:Does Objective-C Method Swizzling affect code in other process?Objective-C Method Swizzling 会影响其他进程中的代码吗?
【发布时间】:2018-07-17 18:48:42
【问题描述】:

Objective-C Method Swizzling 会影响其他进程中的代码吗?

例如,我在我的应用程序中对-[NSArray count] 执行调配方法。其他进程中的代码是否会受到该方法调配的影响?

AFAIU 方法解析应该在流程中。但我不确定系统框架中的代码。它们是否在进程之间共享自己的方法分辨率,或者它们具有每个进程的方法分辨率

【问题讨论】:

  • 您主要通过其他流程做什么?像其他应用程序或线程一样?
  • 其他应用,例如
  • 只是一个旁注 - NSArray 是类集群。这意味着您需要在运行时找到所有私有子类并为所有这些子类调配count,而不是调配-[NSArray count]。当然,这是一个非常糟糕的主意。
  • @BorysVerebskyi 是的,我知道。当我想到共享系统框架中的一个简单示例时,这是第一件事:)

标签: objective-c runtime method-swizzling


【解决方案1】:

没有。如果确实存在,请考虑安全漏洞.....

顺便说一句:你到底为什么要调配“伯爵”?

一般来说,咝咝作响是不好的。易碎,维护噩梦,也是被商店拒绝的好方法。

【讨论】:

  • 我担心这方面的安全问题,我不想调侃count。我只是对 Objective-C 运行时感到好奇,并想出了一个易于理解的例子。 :)
  • 谢谢。您对此有更深入的信息吗?例如,当系统框架加载到进程中时,Objective-C 运行时如何在该进程中进行方法解析?它是否维护进程内的调度表?
  • 系统上的每个进程实际上都使用自己的用户空间内存副本运行。大部分内存是共享的——要么是只读的(可执行代码和其他静态数据),要么是写时复制(很少见——基本上,你触摸一个字节,你会得到一个其他进程无法看到的数据页的副本)-- 所以,是的,每个进程都有自己的方法表。当您进行调配时,您正在处理内存中只有您的进程才能看到的进程的方法表。
  • 我也是你的忠实粉丝。感谢您在这里的贡献:)
  • 乐于助人!您可能会发现此概述很有趣。请注意,iOS 大部分 像这里描述的那样工作。 developer.apple.com/library/content/documentation/Darwin/…
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多