私のコードを、id<protocol>
のタイプのアプリケーションオブジェクトに返すフレームワークとリンクしています。しかし、私は彼らがどんなクラスであるか分からない。 プログラム内のオブジェクトに送信されたメッセージを傍受する方法がありますか(例えば、メッセージをA
と傍受したいのにメッセージB
を選択したいなど) 私はmethod_exchangeImplementations
を使って考えましたが、クラスを知る必要があり、わからないので、私にとっては役に立たないようです。id <protocol>オブジェクトへの呼び出しを代行するにはどうすればよいですか?
1
A
答えて
1
id<protocol>
手段、文字通り、それはプロトコルで@required
メソッドに応答すること以外に保証され、このオブジェクトについては何もありません。
式のid
部分のカスタマイズされた動作に依存すると、脆弱で保守が難しいコードベースが保証されます。フレームワークが変わるたびに、成功と失敗の両方のケースについて完全な資格を取得しなければならず、そのフレームワークの振る舞いの解釈が正しいままであることを確認する必要があります。そして、もしあなたが上記のフレームワークへの情報源を持っていなければ、あなたはブラックボックス・スルーシングの大部分を占めています。
だから、しないでください。テストハーネスを作成している場合や、高度なデバッグを行っている場合を除きます。非常に便利です。
@simple_codeには、Aspectsライブラリが記載されていますので、ここから始めるのが最適です。あなたが受け取ろうとしているもののタイプを知らないので、おそらくisKindOfClass:
を使っていくつかのタイプの曖昧さ回避を行う必要がありますが、やはりそのパスを辿っていくことは、フレームワークの依存性実装の詳細(インタフェースだけでなく)は変更されません。
関連する問題
- 1. フォーマットの呼び出しで代用を行うにはどうすればよいですか?
- 2. オブジェクトのカスタムメソッドを呼び出すにはどうすればよいですか?
- 3. ReactiveUI 7のReactiveCommand.Execute()への直接呼び出しを行うにはどうすればよいですか?
- 4. ブックマークレットの呼び出しの間にオブジェクトを保存するにはどうすればよいですか?
- 5. オブジェクトのメソッドを別のオブジェクトから呼び出すにはどうすればよいですか?
- 6. div idを呼び出してPhpページを作成するにはどうすればよいですか?
- 7. 呼び出し元スレッドでインターフェイスコールバックを呼び出すにはどうすればよいですか?
- 8. IDなしの要素でDom.transformを呼び出すにはどうすればよいですか?
- 9. Javaのコールバックで呼び出し元オブジェクトを取得するにはどうすればよいですか?
- 10. MainActivityのpopBackStack()へのフラグメント呼び出しをインターセプトするにはどうすればよいですか?
- 11. AJAX呼び出しを行うメソッドをモックするにはどうすればよいですか?
- 12. ListView.getView()への不要な呼び出しを防止するにはどうすればよいですか?
- 13. サーバーへのAndroidアプリ呼び出しを確認するにはどうすればよいですか?
- 14. PowerShellで複数のオブジェクトに対してメソッドを呼び出すにはどうすればよいですか?
- 15. javaオブジェクトをJavaで呼び出されるGroovyメソッドに渡すにはどうすればよいですか?
- 16. Ajaxを呼び出すにはどうすればよいですか?
- 17. イベントへの直接の呼び出しを避けるにはどうすればよいですか?
- 18. クラス内のオブジェクト内からクラス関数を呼び出すにはどうすればよいですか?
- 19. FreeMarkerテンプレートのオブジェクトに対してJavaメソッドを呼び出すにはどうすればよいですか?
- 20. あるクラスから別のクラスへKeyEventメソッドを呼び出すにはどうすればよいですか?
- 21. 呼び出すオブジェクトを参照するメソッドを作成するにはどうすればよいですか?
- 22. JavaScriptで親オブジェクトを使用して子メソッドを呼び出すにはどうすればよいですか?
- 23. アクティビティでカスタムクラスを呼び出すにはどうすればよいですか?
- 24. レールコントローラでチャンネルメソッドを呼び出すにはどうすればよいですか?
- 25. サービスクラスでsupportFragmentMangerを呼び出すにはどうすればよいですか?
- 26. インスタンスでクラスメソッドを呼び出すにはどうすればよいですか?
- 27. MVCでコントローラアクションを呼び出すにはどうすればよいですか?
- 28. ベースクラスオブジェクトでサブクラスメソッドを呼び出すにはどうすればよいですか?
- 29. application_controllerでメソッドを呼び出すにはどうすればよいですか?
- 30. render()で.selectedIndexを呼び出すにはどうすればよいですか?
自分のクラスで返されているオブジェクトをラップして、プロトコルも実装できますか? –
これは私が現在行っている方法ですが、完璧ではありません。目的IDは、オブジェクトID を返すことができるオブジェクトID を返すことができます。そして、例えばid も傍受したいと思っています。この提案ソリューションでは、すべての作成方法を傍受してカスタムオブジェクトを返さなければなりません。何かクリーナーがあるかどうか疑問に思っていた。 –
sramij
あなたは呼び出しを傍受することができる代わりのオプションを使用してこのアスペクトライブラリを使用することができます。https://github.com/steipete/Aspects –