問題タブ [message-forwarding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
879 参照

objective-c - forwardInvocation: 戻り値が失われる

SZNUnmanagedReference クラスでメッセージ転送を使用したいと考えています。次のプロパティがあります。

基本的に、 UnmanagedReference のインスタンスがメッセージを受信すると、 という名前のメソッドを持つ にauthorsString転送する必要があります。referenceDescriptor- (NSString *)authorsStringWithSet:(NSSet *)authors

だから、私はこれを書いたSZNUnmanagedReference.m

SZNReferenceDescriptorすべてが機能しているように見え、クラス内のコードが実行されます。authorsStringしかし、私は背中を取得する方法がわかりません。referenceDescriptorドキュメントを正しく理解していれば、メッセージの元の送信者に結果を送り返すことになっていると思います。しかし、うまくいかないようです。私のテストクラスでは、 を[unmanagedReference authorsString]返しますnil

0 投票する
1 に答える
901 参照

objective-c - -クラス メソッドの forwardInvocation

ファサード クラスを介してクラス メソッドを転送するのに苦労しています。

明確にするために、次のすべてのメソッドをオーバーライドしています。

.. それでも、クラス メソッドの場合、呼び出されるのは+resolveClassMethod. そこから、YES を返すか NO を返すかに関係なく、すぐに認識されないセレクター例外が発生します。

どうしたの?
クラス メッセージ転送は、インスタンス メッセージ転送とは異なる動作をしますか? 同様に、クラス メソッド
がないのはなぜですか。+forwardInvocation

どんな助けでも大歓迎です。

0 投票する
1 に答える
3061 参照

objective-c - forwardingTargetForSelector: はどのように機能しますか?

私は持っていUIBarButtonItemます。処理できないメッセージを受信したときに、そのメッセージを特定のView Controllerに転送したい。

バー ボタン項目のメソッドを使用してこれを達成できるのではないかと考えforwardingTargetForSelector:ましたが、タイプ のオブジェクトにはそのようなプロパティが見つからないようですUIBarButtonItem。(用語のポイント: それforwardingTargetForSelector:はプライベート プロパティという意味ですか? 編集: ちょっと待って、私は混乱していると思います... 最後にコロンが付いているメソッドはプロパティではありません... したがって、メソッドを公開することはできます (のように) getter/setter) どのパラメータが渡されますか?)

の値を設定するには、forwardingTargetForSelector:設定したいオブジェクトの .m ファイル内から行う必要があるということですか? つまり、UIBarButtonItem をサブクラス化する必要があるということでしょうか?

もしそうなら、なぜこれが NSObjects のパブリック プロパティではないのでしょうか?

さらに、できればサブクラス化を回避して、転送の目標を達成するための最良の方法は何ですか?

追加情報:

これはすべて、同じボタンが押されたさまざまなインスタンスに対応して、1 つのアクションを再利用したいという私の傾向に起因しています。アクションは現在、デリゲートに含まれており (さまざまな VC で使用される [ほぼ] 同じアクションをどのように実装する必要がありますか? (回答: カテゴリを使用)を参照)、インスタンス化したビュー コントローラーに presentViewController メッセージを送信する必要があるという点だけが異なります。アクションを送信したボタン。したがって、アクションでは、presentViewController メッセージをsenderボタンのインスタンスである に送信できます。そのメッセージを、ボタンのインスタンスを作成したビュー コントローラーに転送できるようにしたいと考えています。それぞれのView Controllerでインスタンス化された直後に、各ボタンの転送プロパティを設定します。

質問を短くするために「なぜ」を避けたかったのですが、それで終わりです。

0 投票する
1 に答える
344 参照

objective-c - Objective-C メッセージングは​​どのように機能しますか? 「超」はどこ?メソッドのスウィズリングの前に、クラスがそのスーパーから実装されていることを確認するにはどうすればよいですか?

Obj-C メッセージについて質問があります。

(1)それが私の主な質問です:クラスをスウィズルまたは呼び出す前に、クラスにそのスーパークラスからの実装があることを確認するにはどうすればよいですか?

ターゲット クラスでは実装されていないが、そのスーパークラスでは実装されているメソッドでメソッド スウィズリングを実行したい場合、メソッド スウィズリングの前に、このクラスがそのスーパークラスから実装されていることを確認するにはどうすればよいですか?

オブジェクトを実装していないオブジェクトにメッセージが送信されると、Obj-C ランタイムはまずその継承階層を検索して、そのスーパークラスから実装を見つけます。存在する場合、Obj-C はそれを別のディスパッチ テーブルにキャッシュして呼び出します。

このキャッシュされた実装でメソッドの入れ替えを行うことはできますか? 可能であれば、メソッドのスウィズリングまたはこのオブジェクトへのメッセージの送信の前に、キャッシュされた実装があることを確認するにはどうすればよいですか? そうでない場合、メソッドの入れ替えの前に の実装を呼び出すだけの実際の実装をこのクラスに追加するにはどうすればよいですか?super

たとえば、次のようなクラス階層があります。

そして、このような実装:

-helloWorld実行時に の実装をクラスと正確に交換 (追加ではなく) したいだけですD。このトリックは、次のようなスウィズル メソッドの場合、元の実装に追加のタスクを追加します。

したがって、 Classまたは Class-helloWorldのインスタンスにメッセージを送信すると、コンソールに次のメッセージが出力されます。DE

いつか、クラスが次のようにD実装し-helloWorldた後:

Classまたは Class-helloWorldのインスタンスにメッセージを送信すると、コンソールに次のメッセージが出力されます。DE

Dこのメソッド交換により、クラスが実装されているかどうかにかかわらず、追加のタスクが確実に呼び出されます-helloWorld

オブジェクトの の実装を呼び出す C 関数を作成する方法について質問superしましたが、それを行うのは簡単ではないようです。superObj-C は、メッセージをの実装に転送するために、このキャッシュされたメカニズムをどのように実現しますか?

(2) Obj-C はどのようにsuperキーワードを処理しますか? そしてどこsuperですか?

Obj-C メッセージでは、最初の 2 つの引数が隠されています:self_cmd. これらは Obj-C 実装で使用できます。しかし、どこsuperですか?

a はのポインターsuperと等しいか? Obj-C はどのようにキーワードを処理しますか?selfisasuper

すべての Obj-C メッセージはobjc_msgSend()またはに変換されobjc_msgSend_stret()ます。に送信されたすべてのメッセージは とsuperに変換されobjc_msgSendSuper()ますobjc_msgSendSuper_stret()か?

前述の例では、-helloWorldメッセージを ClassEと ClassDに送信Eして応答しない場合、Obj-C はメッセージを ClassCの実装に送信します。ClassCの実装では、その の実装を呼び出しますsuperが、 ClassBはそれを実装していないため、 Class に転送しAます。

この場合、 Class のsuperは ClassCである必要があるBため、実際には ClassBのキャッシュされた実装を呼び出しますね。BClassのキャッシュされた実装をスウィズルしてもいいですか?

0 投票する
1 に答える
6841 参照

c# - HttpRequestMessage を別のサーバーに転送する方法

http Web APIリクエストを別のサーバーに転送する最良の方法は何ですか?

これが私が試していることです:

特定の API 要求を取得したときに、要求を変更し、それを別のサーバーに転送して、その 2 番目のサーバーから送信された応答を返したい .NET プロジェクトがあります。

私は次のことをしています:

Clone メソッドは次のように定義されています。

ただし、何らかの理由で、URL を指定された redirectUri にリダイレクトする代わりに、RequestMessage.RequestUri が に設定されている 404 応答が返されhttp://localhost:61833/api/products/2ます。(http://localhost:61833元のリクエスト uri のルートです)。

ありがとう

0 投票する
2 に答える
1226 参照

objective-c - メッセージ転送チェーン

Apple のメッセージ転送に関するドキュメントやその他の記事を読みましたが、ObjC ランタイムはオブジェクトの認識されないメッセージを自動的に転送し、一致するセレクターがない場合、「認識されないセレクターがインスタンスに送信されました」というエラーがスローされるようです。

しかし、私には説明できない 2 つの質問があります。

  • ランタイムは次のメッセージ転送オブジェクトをどのように見つけますか?
  • ObjC メッセージ転送チェーンについて説明できる人はいますか?