gpt4 book ai didi

objective-c - Monkey 修补 Objective-C 中的实例

转载 作者:行者123 更新时间:2023-12-03 06:14:33 25 4
gpt4 key购买 nike

我正在尝试遵循 here 的(精彩)指示,但我有一个类的实例,无法通过子类化来修改。有没有办法只重写类实例的方法?

最佳答案

当心。您即将进入 ObjC 中一些相当深奥的魔法,并且您可能产生的错误种类令人费解。这些是在其他一切都失败后应该使用的最后技术,并且您应该尽一切努力来隔离此代码。也就是说,ObjC 是一种高度动态的语言,您可以重新连接大多数东西。

首先,针对您的具体问题,您可以更改实例的类,这将实现您想要的。规则基本上是:

  • 新类应该是前一个类的子类
  • 新类不得添加任何 ivars。在子类中添加 ivars 是可能导致上述令人费解的错误的原因之一。

如果您这样做错误,您将不会收到任何警告或错误。你只会遇到奇怪的崩溃。

鉴于此,更改对象的类实际上非常容易:

object->isa = [NewClass class];

除此之外,您还可以使用方法调配来更改类的每个实例的方法的实现。我在Hijacking with method_exchangeImplementations()中有一些这样的例子。不过,完成此操作后,祝您使用调试器好运。

关于objective-c - Monkey 修补 Objective-C 中的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com