問題タブ [method-swizzling]
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.
ios - get/set メソッドが置き換えられた目的の c から継承する動的変数を使用した迅速なクラスのタイミングの問題
Objective-C クラスから継承する迅速なクラスがあり、動的プロパティがある場合、非常に具体的な問題があります。
ここで、+initialize で、swift(:NSObject) クラスに getter と setter を挿入しています。init オーバーロードから値を設定するときのわずかな問題を除いて、これらは問題なく動作します。
したがって、私の迅速なクラスは次のようになります。
そして、swift のベースとなる Objective-C クラスは次のとおりです。
簡単に言うと、 への呼び出し中はinit(initialValue: String)
、ゲッターとセッターはトリガーされませんが、init への呼び出しが完了するとすぐに動作します。
これは、initialize の呼び出しが正常に完了し、メソッドが置き換えられているにもかかわらずです。
ただし、init
関数の外では、get/set は期待どおりに動作します。
ここでそれが呼び出されます。
オブジェクトのpo test.testStringProperty
作成後、nil が出力されます。しかし、その後の割り当てでは、すべての正しいメソッドがトリガーされます。
init 内で割り当てる場合にのみ失敗します。他のどこでも、それは魅力のように機能します。
可能であれば、イニシャライザ内でこれを機能させたいのですが、別の方法で回避できるかどうかはわかりません。
問題を再現するサンプル アプリへのリンクを次に示します。
https://www.dropbox.com/s/5jymj581yps799d/swiftTest.zip?dl=0
objective-c - Swiftを使用してUIApplicationにswizzlingメソッドを追加するには?
UIApplication メソッドにスウィズリング メソッドを使用しようとする以下のコードがあります。しかし、メソッドが呼び出されません。その間、このコードをフレームワークまたはプライベート ポッドに追加しようとしています。
ios - メソッド スウィズリング - 基になるメソッドを変更する必要なく、カスタム ロガーを介してすべてのメソッド呼び出しをルーティングします。
そのクラスのオブジェクトでそのメソッドが呼び出されている間に、クラス名とメソッド名を含む特定のログステートメントを出力するフレームワークを作成しようとしています。実際のメソッドを変更する必要なくこれを行いたいです。たとえば、 method があるとします。-(void)sendButtonClicked
コントロールがこのメソッドに到達すると、フレームワークはインターセプトしてクラスとメソッド名をコンソールに出力します。
これはMethod Swizzlingのようなものです。
どんな手掛かり?
ios - iOS アプリでスウィズルされたすべてのメソッドを一覧表示する方法はありますか?
私は基本的に、いつ/どのサードパーティライブラリがスウィズルするかを検出する方法を探しています。私は最近、広告ライブラリが AFNetworking の奇妙なフォークを使用している状況に遭遇しました。AFNetworking は NSURLSessionTask をスウィズルしますが、2 つのスウィズルは特定の状況下でうまく動作しませんでした。この種のことを検出して健全性をチェックできるようにしたいと思っています。理想的には、アプリ内のすべてのswizzledメソッドのバージョン管理されたダンプを保持して、誰が何にパッチを当てているのか、そしてリスクが何であるかをある程度可視化できるようにしたいと考えています. Google とスタック オーバーフロー検索では、スウィズルの方法に関するチュートリアルがたくさんあります。誰かがこの問題に遭遇したり、解決策を持っていますか? objc/runtime.h を使用して何かをコーディングできるように見えますが、これが必要になったのは私が初めてだとは思えません。
ios - Swiftでのプロパティのメソッドスウィズリング
obj-c でメソッドを置き換えることは可能setMyProperty:
ですが、swift で行う方法を知りたいですか?
たとえば、私は置き換えたいUIScrollView::setContentOffset:
:
...しかし、実行後originalSelector
に含まれていますsetContentOffset:animaed
。では、プロパティの setter メソッドを に渡す方法はselector
?
objective-c - Objective-Cでのメソッドスウィズリングの欠点は何ですか?
Objective-Cでのメソッドスウィズリングの欠点は何ですか?
objective-c - スウィズル関数から元の関数を呼び出す
私はメソッドの入れ替えをいじっていて、実行後に元の関数を呼び出したいmethod_exchangeImplementations
. このためにセットアップした2つのプロジェクトがあります。
最初のプロジェクトは、アプリケーションのメイン プロジェクトです。このプロジェクトには、アプリケーションのすべてのロジックが含まれています。originalMethodName
ビューが読み込まれるときに呼び出されることに注意してください。
2 番目のプロジェクトには、スウィズリングのコードのみが含まれています。関数を呼び出しswizzle_originalMethodName
てメインアプリケーションに挿入したいコードを含むメソッドがあります。originalMethodName
スウィズルは問題なく動作しています (以下の出力を参照) originalMethodName
。swizzle_originalMethodName
私は使用しようとしましNSInvocation
たが、運がありません。私が間違っていることはありますか?
ios - iOS メソッド メソッド スウィズリング - 2 SDK が 1 つのアプリで "ViewDidAppear" メソッドをスウィズルしようとすると、どうなりますか?
iOSアプリに2つのSDKを追加すると、同じメソッド「ViewDidAppear」のメソッドスウィズリングを内部で実行すると、実行時に(良い+悪い)何が起こる可能性があります。