9

Objective-C は、存在しないクラス メソッドへの呼び出しをインターセプトする方法を提供しますか?

4

2 に答える 2

5

メソッドは、forwardInvocation使用したいものです。オブジェクトで存在しないセレクターが呼び出されると、自動的に呼び出されます。このメソッドのデフォルトの動作は呼び出しdoesNotRecognizeSelector:(コンソールにデバッグ情報を出力するもの) ですが、必要に応じてオーバーライドできます。Apple が推奨するアプローチの 1 つは、このメソッドにメソッド呼び出しを別のオブジェクトに転送させることです。

- (void)forwardInvocation:(NSInvocation *)anInvocation

forwardInvocationかなり高価な操作であることに注意してください。NSInvocation オブジェクトは、フレームワークによって作成され、(オプションで) 別のインスタンスでセレクターを呼び出すために使用される必要があります。存在しないセレクターを検出する (比較的) 高速な方法を探している場合は、forwardingTargetForSelector代わりに実装することを選択できます。

- (id)forwardingTargetForSelector:(SEL)aSelector

これらのメソッドを効果的にオーバーライドする方法については、 Apple のドキュメントを参照してください。特にforwardInvocation、欠落しているセレクターを持つ同じオブジェクトでメソッドをオーバーライドする場合は、注意すべき点がいくつかあります。

于 2011-08-04T10:02:03.357 に答える
2

はい、resolveClassMethod: クラス メソッド (NSObject で定義されている) を使用できます。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

ここにも注意すべきことがあります(初めて困惑しました):http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html

于 2011-08-04T09:53:36.223 に答える