Objective-C は、存在しないクラス メソッドへの呼び出しをインターセプトする方法を提供しますか?
2 に答える
メソッドは、forwardInvocation
使用したいものです。オブジェクトで存在しないセレクターが呼び出されると、自動的に呼び出されます。このメソッドのデフォルトの動作は呼び出しdoesNotRecognizeSelector:
(コンソールにデバッグ情報を出力するもの) ですが、必要に応じてオーバーライドできます。Apple が推奨するアプローチの 1 つは、このメソッドにメソッド呼び出しを別のオブジェクトに転送させることです。
- (void)forwardInvocation:(NSInvocation *)anInvocation
forwardInvocation
かなり高価な操作であることに注意してください。NSInvocation オブジェクトは、フレームワークによって作成され、(オプションで) 別のインスタンスでセレクターを呼び出すために使用される必要があります。存在しないセレクターを検出する (比較的) 高速な方法を探している場合は、forwardingTargetForSelector
代わりに実装することを選択できます。
- (id)forwardingTargetForSelector:(SEL)aSelector
これらのメソッドを効果的にオーバーライドする方法については、 Apple のドキュメントを参照してください。特にforwardInvocation
、欠落しているセレクターを持つ同じオブジェクトでメソッドをオーバーライドする場合は、注意すべき点がいくつかあります。
はい、resolveClassMethod: クラス メソッド (NSObject で定義されている) を使用できます。
ここにも注意すべきことがあります(初めて困惑しました):http://iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html