【问题标题】:How to obtain the list the current instantiated objects for a given class in Objective-C?如何获取Objective-C中给定类的当前实例化对象列表?
【发布时间】:2011-01-18 13:48:39
【问题描述】:

由于在 Objective-C 2.0 中不推荐使用 class_poseAs(..),我需要找到另一种方法来在运行时更改对象的类。我发现我可以使用 object_setClass(..) 更改对象的类。我现在的问题是查找给定类的所有当前实例以便更新它们。

一种解决方案是维护我想要更新的实例的全局字典,但我想知道是否已经有一种方法可以从反射 api 获取这样的集合。

我检查了Apple's Runtime reference,但找不到任何有用的东西。仅使用 method_exchangeImplementations(..) 更新类的方法对我来说不是解决方案,因为我希望能够通过使用 super 重用 old 实现.

【问题讨论】:

    标签: objective-c reflection objective-c-runtime


    【解决方案1】:

    通常,如果您想将特定类中的各种方法的实现换成您自己的,您会在 Objective-C 2.0 运行时中使用method_exchangeImplementations() 函数。 (您需要#import objc/runtime.h)。这比尝试换出实际的类要简单得多,因为 poseAsClass: 已被弃用并且在 64 位运行时中不可用。

    【讨论】:

    • 正如我在第三段中提到的,我真的需要改变整个类,而不仅仅是方法。我想利用 OO 调度机制来重用原始代码。 (对象的新类将是子类或原始类)。
    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多