背景:BackendClient
サーバーとの接続を表す
オブジェクト (と呼びましょう) があります。そのメソッドは単一に生成され@protocol
、それらはすべて同期的であるため、バックグラウンドでそれらを呼び出すプロキシ オブジェクトを作成したいと考えています。主な問題は戻り値です。これは明らかに非同期メソッドから返すことができないため、コールバックを渡す必要があります。「簡単な」方法は、すべてBackendClient
のメソッドをコピーし、コールバック引数を追加することです。しかし、ObjectiveC の性質は動的ですが、それはその問題を解決するための非常に動的な方法ではありません。そこでperformSelector:
登場です。問題は完全に解決されますが、プロキシ オブジェクトの透過性はほとんど失われます。
問題:NSProxy
宣言されていないセレクターを、既に宣言されているかのようにプロキシ (のサブクラス) オブジェクト
に送信できるようにしたいと考えています。たとえば、次の方法があります。
-(AuthResponse)authByRequest:(AuthRequest*)request
BackendClient
プロトコルで。そして、プロキシ呼び出しは次のようになります。
[proxyClient authByRequest:myRequest withCallback:myCallback];
しかし、これはコンパイルされません。
「BackendClientProxy」の目に見える @interface がセレクター「authByRequest:withCallBack:」を宣言していません
わかった。コンパイラを少し落ち着かせましょう:
[(id)proxyClient authByRequest:myRequest withCallback:myCallback];
ああ。別のエラー:
セレクター 'authByRequest:withCallBack:' の既知のインスタンス メソッドはありません
私の頭に浮かぶ唯一のことは@protocol
、実行時に必要なメソッドを使用して何らかの形で新しいものを構築することですが、その方法がわかりません。
結論:このコンパイル エラーを抑制する必要があります。それを行う方法はありますか?