2

class_poseAs(..) は Objective-C 2.0 で非推奨になったため、実行時にオブジェクトのクラスを変更する別の方法を見つける必要があります。object_setClass(..) を使用してオブジェクトのクラスを変更できることがわかりました。私の問題は、特定のクラスの現在のインスタンスをすべて見つけて更新することです。

解決策は、更新する可能性のあるインスタンスのグローバル ディクショナリを維持することですが、リフレクティブ API からそのようなコレクションを取得する方法が既にあるかどうかを知りたいです。

Apple のランタイム リファレンスを確認しましたが、有用なものが見つかりません。class のメソッドだけをmethod_exchangeImplementations(..)で更新することは、 superを使用して古い実装を再利用できるようにしたいので、私にとっては解決策ではありません。

4

1 に答える 1

2

一般に、特定のクラスのさまざまなメソッドの実装を自分のものに交換したい場合は、Objective-C 2.0 ランタイムでmethod_exchangeImplementations()関数を使用します。(する必要があります#import objc/runtime.h)。poseAsClass:これは、非推奨であり、64 ビット ランタイムでは使用できないため、実際のクラスを交換しようとするよりもはるかに簡単です。

于 2010-02-19T00:09:56.103 に答える