問題タブ [nsproxy]

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 に答える
576 参照

objective-c - インスタンスメソッドが見つからないという警告を無効にする

私は現在、NSProxy特定のメッセージをインターセプトし、それらを誰にも転送せず、処理するだけのサブクラスに取り組んでいるため、これらのメソッドは実際には存在しません。そしてここに問題があります、明らかにコンパイラは欠落しているメソッド実装について不平を言い始めます、そして私はそれを止める方法を理解できません、コンパイラをシャットダウンさせるためだけにインターフェイスにスタブメソッドを追加することはメソッドが機能しないためですは恣意的に形成されており、私はそれらを先に知りません(もう少し具体的に言うと、私はこのプロジェクトを求めています)。

理想的には、この特定のクラスをチェックするメソッドをまったく実行しないようにコンパイラーに伝えたいのですが、これはかなりありそうもないので、#pragmaまたは他の方法(シャットダウンを含まない)にも満足します。プロジェクト/ファイル全体のすべての警告に対してコンパイラが起動します!)

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

objective-c - self を使用した forwardInvocation を使用した NSProxy - 可能ですか?

オブジェクトに渡されたメッセージをキャプチャするために、NSProxy、forwardInvocation などを設定しました。すべて正常に動作します。

私がやりたいことは、自分自身によって渡されたメッセージをキャプチャすることです。

うまくいかないようです...これは可能ですか?

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

objective-c - NSProxy クラスが役立つ実際の例とその理由は?

なぜ NSProxy クラスがそれほど重要なのか疑問に思っていました。オブジェクトがそのインスタンス変数を他のオブジェクト内に保持する必要があるのはなぜですか? いつ使用するかを理解するために例が必要です。ありがとう!

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

objective-c - プロキシされたクラスの内部呼び出しがプロキシ経由でルーティングされない

メソッド スウィズリングを使用して、クラス内のすべてのメソッド呼び出しをいくつかの追加機能でラップしていました。具体的には:

  • このメソッド呼び出しに必要なオブジェクトがキャッシュにあるかどうかを確認しています
  • キャッシュにそのオブジェクトがあった場合は、それを返します。
  • そうでない場合は、元の実装にディスパッチし、キャッシュにデータを入力してそれを返します。

NSProxy を使用すると、より読みやすいコードが得られるかどうかを確認したいと思いました。さらに、NSProxy を使用すると、不明な数の引数を使用してメソッド呼び出しを簡単にリダイレクトできるのではないかと考えました。

したがって、NSProxy バージョンは、1 つの重要なキャッチを除いて正常に動作します。サブクラスの内部呼び出しはプロキシを経由しません。

代用インターセプターを作成する方法は次のとおりです。

内部呼び出し (つまり、プロキシされたクラス内の「self」への呼び出し) は、プロキシ経由でルーティングされません。

さて、プロキシされたクラスのサブクラスで、内部呼び出しをプロキシ経由にしたいコードがあります。しかし、そうではありません。

質問:

これらの内部アクセスをプロキシ経由で取得する簡単な方法は何ですか?

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

ios - performSelector: なしで宣言されていないセレクターを送信する方法は?

背景:BackendClientサーバーとの接続を表す オブジェクト (と呼びましょう) があります。そのメソッドは単一に生成され@protocol、それらはすべて同期的であるため、バックグラウンドでそれらを呼び出すプロキシ オブジェクトを作成したいと考えています。主な問題は戻り値です。これは明らかに非同期メソッドから返すことができないため、コールバックを渡す必要があります。「簡単な」方法は、すべてBackendClientのメソッドをコピーし、コールバック引数を追加することです。しかし、ObjectiveC の性質は動的ですが、それはその問題を解決するための非常に動的な方法ではありません。そこでperformSelector:登場です。問題は完全に解決されますが、プロキシ オブジェクトの透過性はほとんど失われます。

問題:NSProxy宣言されていないセレクターを、既に宣言されているかのようにプロキシ (のサブクラス) オブジェクト に送信できるようにしたいと考えています。たとえば、次の方法があります。

BackendClientプロトコルで。そして、プロキシ呼び出しは次のようになります。

しかし、これはコンパイルされません。

「BackendClientProxy」の目に見える @interface がセレクター「authByRequest:withCallBack:」を宣言していません

わかった。コンパイラを少し落ち着かせましょう:

ああ。別のエラー:

セレクター 'authByRequest:withCallBack:' の既知のインスタンス メソッドはありません

私の頭に浮かぶ唯一のことは@protocol、実行時に必要なメソッドを使用して何らかの形で新しいものを構築することですが、その方法がわかりません。

結論:このコンパイル エラーを抑制する必要があります。それを行う方法はありますか?

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

objective-c - クラスのふりをしている NSProxy は、64 ビット ランタイムで RespondsToSelector を処理しません。

OCMockito では、テスト ダブルは NSProxy で実装されます。インスタンスのダブル スタンディングは次のように実装さ-respondsToSelector:れます。

しかし、クラスのダブル スタンディングは次の-respondsToSelector:ように実装されます。

これはすべて 32 ビット ランタイムで機能します。たとえば、_mockedClassis[NSString class]の場合、プロキシはセレクターに応答すると正しく応答します。+pathWithComponents:

しかし、64 ビット ランタイムではクラッシュします。

を呼び出していることに注意してくださいclass_respondsToSelector(…)。ランタイムに加えられた最適化に噛まれているのではないかと思います。これを修正するにはどうすればよいですか?

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

ios - iOS: NSProxy は、クラス自体の内部で呼び出されたメソッドをフックできません

NSProxy を使用してクラスをモックし、クラスのすべての呼び出しをフックしたいと考えています。ただし、クラス内で呼び出されたメソッドではなく、クラス外で呼び出されたメソッドのみがフックされます。以下は私のコードのようなものです:

私のAppDelegate.mでは、TBClassMockはNSProxyのサブクラスです

私のTBTestClass.m で

私のTBClassMock.m で

次に、 の呼び出しをログに記録できますが、 の呼び出しを[foo outsideCalled]ログに記録できません[self insideCalled]

のクラスのすべての呼び出しで何かを行うことを目指していますが、//... Do other thingsこの方法は失敗したようです。これと私の要件を実装するための他の方法についての説明はありますか? クラスのすべてのメソッドを使用してスウィズルしたくないのは、method_exchangeImplementationsそれが面倒すぎて良い方法ではないと思うからです。

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

cocoa - プロキシオブジェクトなしで NSArrayController から選択したオブジェクトを取得する方法は?

NSTableViewに裏打ちされた複数のオブジェクトのコピーと貼り付けを実装しようとしていNSArrayControllerます。私のcopy:方法は次のようになります。

コピーを実行しようとすると、コントローラーの選択にアクセスするとエラーが発生します。これは、プロキシ オブジェクトが返されるためです。

実際に選択されたオブジェクトを取得するにはどうすればよいですか?

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

ios - iOS のプロキシ パターン - Swift

swiftを使用してiOSでプロキシパターンを作成する必要があります

Objective Cを使用して試してみましたが、コードは次のとおりです

MyProtocol.h

TestBO.h

TestBO.m

TestProxyHandler.h

TestProxyHandler.m

を使用して呼び出しました

しかし、イニシャルツィアーがメッセージを表示していても、Swiftで動作させることはできません

TestHandler.swift

誰もが迅速にこれを行う手がかりを持っていますか??

編集:

Javaでは、 Proxy.newProxyInstance呼び出しを使用してメソッドのランタイム実装を作成できますが、これは iOS で実現できますか? スウィフトを使用していますか?どんな手掛かり ?