問題タブ [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.
objective-c - インスタンスメソッドが見つからないという警告を無効にする
私は現在、NSProxy
特定のメッセージをインターセプトし、それらを誰にも転送せず、処理するだけのサブクラスに取り組んでいるため、これらのメソッドは実際には存在しません。そしてここに問題があります、明らかにコンパイラは欠落しているメソッド実装について不平を言い始めます、そして私はそれを止める方法を理解できません、コンパイラをシャットダウンさせるためだけにインターフェイスにスタブメソッドを追加することはメソッドが機能しないためですは恣意的に形成されており、私はそれらを先に知りません(もう少し具体的に言うと、私はこのプロジェクトを求めています)。
理想的には、この特定のクラスをチェックするメソッドをまったく実行しないようにコンパイラーに伝えたいのですが、これはかなりありそうもないので、#pragma
または他の方法(シャットダウンを含まない)にも満足します。プロジェクト/ファイル全体のすべての警告に対してコンパイラが起動します!)
objective-c - self を使用した forwardInvocation を使用した NSProxy - 可能ですか?
オブジェクトに渡されたメッセージをキャプチャするために、NSProxy、forwardInvocation などを設定しました。すべて正常に動作します。
私がやりたいことは、自分自身によって渡されたメッセージをキャプチャすることです。
うまくいかないようです...これは可能ですか?
objective-c - NSProxy クラスが役立つ実際の例とその理由は?
なぜ NSProxy クラスがそれほど重要なのか疑問に思っていました。オブジェクトがそのインスタンス変数を他のオブジェクト内に保持する必要があるのはなぜですか? いつ使用するかを理解するために例が必要です。ありがとう!
objective-c - プロキシされたクラスの内部呼び出しがプロキシ経由でルーティングされない
メソッド スウィズリングを使用して、クラス内のすべてのメソッド呼び出しをいくつかの追加機能でラップしていました。具体的には:
- このメソッド呼び出しに必要なオブジェクトがキャッシュにあるかどうかを確認しています
- キャッシュにそのオブジェクトがあった場合は、それを返します。
- そうでない場合は、元の実装にディスパッチし、キャッシュにデータを入力してそれを返します。
NSProxy を使用すると、より読みやすいコードが得られるかどうかを確認したいと思いました。さらに、NSProxy を使用すると、不明な数の引数を使用してメソッド呼び出しを簡単にリダイレクトできるのではないかと考えました。
したがって、NSProxy バージョンは、1 つの重要なキャッチを除いて正常に動作します。サブクラスの内部呼び出しはプロキシを経由しません。
代用インターセプターを作成する方法は次のとおりです。
内部呼び出し (つまり、プロキシされたクラス内の「self」への呼び出し) は、プロキシ経由でルーティングされません。
さて、プロキシされたクラスのサブクラスで、内部呼び出しをプロキシ経由にしたいコードがあります。しかし、そうではありません。
質問:
これらの内部アクセスをプロキシ経由で取得する簡単な方法は何ですか?
ios - performSelector: なしで宣言されていないセレクターを送信する方法は?
背景:BackendClient
サーバーとの接続を表す
オブジェクト (と呼びましょう) があります。そのメソッドは単一に生成され@protocol
、それらはすべて同期的であるため、バックグラウンドでそれらを呼び出すプロキシ オブジェクトを作成したいと考えています。主な問題は戻り値です。これは明らかに非同期メソッドから返すことができないため、コールバックを渡す必要があります。「簡単な」方法は、すべてBackendClient
のメソッドをコピーし、コールバック引数を追加することです。しかし、ObjectiveC の性質は動的ですが、それはその問題を解決するための非常に動的な方法ではありません。そこでperformSelector:
登場です。問題は完全に解決されますが、プロキシ オブジェクトの透過性はほとんど失われます。
問題:NSProxy
宣言されていないセレクターを、既に宣言されているかのようにプロキシ (のサブクラス) オブジェクト
に送信できるようにしたいと考えています。たとえば、次の方法があります。
BackendClient
プロトコルで。そして、プロキシ呼び出しは次のようになります。
しかし、これはコンパイルされません。
「BackendClientProxy」の目に見える @interface がセレクター「authByRequest:withCallBack:」を宣言していません
わかった。コンパイラを少し落ち着かせましょう:
ああ。別のエラー:
セレクター 'authByRequest:withCallBack:' の既知のインスタンス メソッドはありません
私の頭に浮かぶ唯一のことは@protocol
、実行時に必要なメソッドを使用して何らかの形で新しいものを構築することですが、その方法がわかりません。
結論:このコンパイル エラーを抑制する必要があります。それを行う方法はありますか?
objective-c - クラスのふりをしている NSProxy は、64 ビット ランタイムで RespondsToSelector を処理しません。
OCMockito では、テスト ダブルは NSProxy で実装されます。インスタンスのダブル スタンディングは次のように実装さ-respondsToSelector:
れます。
しかし、クラスのダブル スタンディングは次の-respondsToSelector:
ように実装されます。
これはすべて 32 ビット ランタイムで機能します。たとえば、_mockedClass
is[NSString class]
の場合、プロキシはセレクターに応答すると正しく応答します。+pathWithComponents:
しかし、64 ビット ランタイムではクラッシュします。
を呼び出していることに注意してくださいclass_respondsToSelector(…)
。ランタイムに加えられた最適化に噛まれているのではないかと思います。これを修正するにはどうすればよいですか?
ios - iOS: NSProxy は、クラス自体の内部で呼び出されたメソッドをフックできません
NSProxy を使用してクラスをモックし、クラスのすべての呼び出しをフックしたいと考えています。ただし、クラス内で呼び出されたメソッドではなく、クラス外で呼び出されたメソッドのみがフックされます。以下は私のコードのようなものです:
私のAppDelegate.mでは、TBClassMockはNSProxyのサブクラスです
私のTBTestClass.m で
私のTBClassMock.m で
次に、 の呼び出しをログに記録できますが、 の呼び出しを[foo outsideCalled]
ログに記録できません[self insideCalled]
。
のクラスのすべての呼び出しで何かを行うことを目指していますが、//... Do other things
この方法は失敗したようです。これと私の要件を実装するための他の方法についての説明はありますか? クラスのすべてのメソッドを使用してスウィズルしたくないのは、method_exchangeImplementations
それが面倒すぎて良い方法ではないと思うからです。
cocoa - プロキシオブジェクトなしで NSArrayController から選択したオブジェクトを取得する方法は?
NSTableView
に裏打ちされた複数のオブジェクトのコピーと貼り付けを実装しようとしていNSArrayController
ます。私のcopy:
方法は次のようになります。
コピーを実行しようとすると、コントローラーの選択にアクセスするとエラーが発生します。これは、プロキシ オブジェクトが返されるためです。
実際に選択されたオブジェクトを取得するにはどうすればよいですか?
ios - iOS のプロキシ パターン - Swift
swiftを使用してiOSでプロキシパターンを作成する必要があります
Objective Cを使用して試してみましたが、コードは次のとおりです
MyProtocol.h
TestBO.h
TestBO.m
TestProxyHandler.h
TestProxyHandler.m
を使用して呼び出しました
しかし、イニシャルツィアーがメッセージを表示していても、Swiftで動作させることはできません
TestHandler.swift
誰もが迅速にこれを行う手がかりを持っていますか??
編集:
Javaでは、 Proxy.newProxyInstance呼び出しを使用してメソッドのランタイム実装を作成できますが、これは iOS で実現できますか? スウィフトを使用していますか?どんな手掛かり ?