問題タブ [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.

0 投票する
0 に答える
206 参照

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

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

objective-c - Swiftを使用してUIApplicationにswizzlingメソッドを追加するには?

UIApplication メソッドにスウィズリング メソッドを使用しようとする以下のコードがあります。しかし、メソッドが呼び出されません。その間、このコードをフレームワークまたはプライベート ポッドに追加しようとしています。

0 投票する
0 に答える
104 参照

ios - メソッド スウィズリング - 基になるメソッドを変更する必要なく、カスタム ロガーを介してすべてのメソッド呼び出しをルーティングします。

そのクラスのオブジェクトでそのメソッドが呼び出されている間に、クラス名とメソッド名を含む特定のログステートメントを出力するフレームワークを作成しようとしています。実際のメソッドを変更する必要なくこれを行いたいです。たとえば、 method があるとします。-(void)sendButtonClickedコントロールがこのメソッドに到達すると、フレームワークはインターセプトしてクラスとメソッド名をコンソールに出力します。

これはMethod Swizzlingのようなものです。

どんな手掛かり?

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

ios - iOS アプリでスウィズルされたすべてのメソッドを一覧表示する方法はありますか?

私は基本的に、いつ/どのサードパーティライブラリがスウィズルするかを検出する方法を探しています。私は最近、広告ライブラリが AFNetworking の奇妙なフォークを使用している状況に遭遇しました。AFNetworking は NSURLSessionTask をスウィズルしますが、2 つのスウィズルは特定の状況下でうまく動作しませんでした。この種のことを検出して健全性をチェックできるようにしたいと思っています。理想的には、アプリ内のすべてのswizzledメソッドのバージョン管理されたダンプを保持して、誰が何にパッチを当てているのか、そしてリスクが何であるかをある程度可視化できるようにしたいと考えています. Google とスタック オーバーフロー検索では、スウィズルの方法に関するチュートリアルがたくさんあります。誰かがこの問題に遭遇したり、解決策を持っていますか? objc/runtime.h を使用して何かをコーディングできるように見えますが、これが必要になったのは私が初めてだとは思えません。

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

ios - Swiftでのプロパティのメソッドスウィズリング

obj-c でメソッドを置き換えることは可能setMyProperty:ですが、swift で行う方法を知りたいですか?

たとえば、私は置き換えたいUIScrollView::setContentOffset:

...しかし、実行後originalSelectorに含まれていますsetContentOffset:animaed。では、プロパティの setter メソッドを に渡す方法はselector?

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

objective-c - Objective-Cでのメソッドスウィズリングの欠点は何ですか?

Objective-Cでのメソッドスウィズリングの欠点は何ですか?

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

objective-c - スウィズル関数から元の関数を呼び出す

私はメソッドの入れ替えをいじっていて、実行後に元の関数を呼び出したいmethod_exchangeImplementations. このためにセットアップした2つのプロジェクトがあります。

最初のプロジェクトは、アプリケーションのメイン プロジェクトです。このプロジェクトには、アプリケーションのすべてのロジックが含まれています。originalMethodNameビューが読み込まれるときに呼び出されることに注意してください。

2 番目のプロジェクトには、スウィズリングのコードのみが含まれています。関数を呼び出しswizzle_originalMethodNameてメインアプリケーションに挿入したいコードを含むメソッドがあります。originalMethodName

スウィズルは問題なく動作しています (以下の出力を参照) originalMethodNameswizzle_originalMethodName

私は使用しようとしましNSInvocationたが、運がありません。私が間違っていることはありますか?

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

ios - iOS メソッド メソッド スウィズリング - 2 SDK が 1 つのアプリで "ViewDidAppear" メソッドをスウィズルしようとすると、どうなりますか?

iOSアプリに2つのSDKを追加すると、同じメソッド「ViewDidAppear」のメソッドスウィズリングを内部で実行すると、実行時に(良い+悪い)何が起こる可能性があります。