問題タブ [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 投票する
1 に答える
353 参照

objective-c - Objective-C メソッドのスウィズリング パフォーマンス

Objective-Cでメソッドスウィズリングを使用すると、どのようなパフォーマンスペナルティが発生しますか?

メッセージのスウィズリングで無効になるコンパイラの最適化があるとすれば、それはどれですか?

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

ios - EXC_BAD_ACCESS 時のスウィズル popViewControllerAnimated:

コントローラー間のナビゲーションをログに記録するために、-popViewControllersAnimated: メソッドのスウィズリングを使用します。また、EXC_BAD_ACCESS で奇妙なクラッシュが発生することもあります。その理由は何ですか?

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

android - Android には iOS メソッドのスウィズリングのようなものがありますか (PhoneGap プラグインの初期化用)?

サードパーティのネイティブ SDK をラップする iOS と Android の両方の PhoneGap プラグインを作成しています。AppDelegateiOS の場合、これらのライブラリを初期化する目的で、swizzling を使用して に動作を追加することができました。

今、私は Android でも同じことをする必要があります。例として、私は現在AppsFlyer SDK を使用していますが、これはドキュメントが初期化する方法です:


AppsFlyer Android SDK ドキュメント


PhoneGap プラグインでこのようなことを行うためのテクニックはありますか? Android Studio プロジェクト自体をソース管理下に置くことなく、プロジェクトを最初からビルドできる必要があります。

ありがとう!

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

objective-c - 保持されていたものをスウィズルする

こんにちは、よくわかりませんretain

ここにこのコードがあります:

私はそれをスウィズルしようとしているので、彼らが名前付きの画像を要求するたびにNSApplicationIcon、カスタムアイコンを付けます. 元のアイコンが戻ってくることがあります。この保持のせいだと思いますか?私は正しいですか?リテインをクリアすることはできますか?これにより、スウィズルが現在のように 80% しか機能しないのではなく、100% 機能するようになります :(

私はここで読みましたretainが、上記の状況を助けるためにそれを適用することができませんでした: http://www.cocoawithlove.com/2010/06/assign-retain-copy-pitfalls-in-obj-c.html

非常に具体的には、ここでこれをスウィズルしようとしています: https://dxr.mozilla.org/mozilla-central/source/widget/cocoa/nsMacDockSupport.mm?offset=200#140

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

ios - メソッドの入れ替えが機能しない

メソッドのスウィズリングを利用したいのですが、簡単な例でさえうまくいきません。概念が何であるかを誤解している可能性がありますが、私が知る限り、メソッドの実装を入れ替えることができます。

A と B の 2 つのメソッドが与えられた場合、A を呼び出すと代わりに B が実行されるように、それらの実装を入れ替えたいと思います。スウィズリングの例をいくつか見つけました ( example1およびexample2 )。これをテストするクラスを含む新しいプロジェクトを作成しました。

次に、それを実行しようとします

予想される出力は「B」ですが、「A」はまだ印刷中です。私のコードからわかるようIMPに、スウィズル操作の前後にそれぞれのプリントを含めました。これらのプリントは、交換が行われていることを示していますが、出力は同じままです。

出力:

これらの変更を有効にすることに関して、私が見逃しているものはありますか?

PS。現在XCode 7.0.1を使用しています

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

ios - Objective-C、iOS 9 の高度なメソッド スウィズリング?

質問は簡単です。いつもと同じことが必要です-元のメソッドを私のものに置き換える方法はありますが@selector(presentViewController:animated:completion:)、iOS9では? 実際のデバイスではなく、iOS9 シミュレータでのみ動作します。

はい、このコードが呼び出されますが、取得しEXC_BAD_ACCESSます。

それをテストするために、「Master-Detail テンプレート」からテスト アプリを作成し、ボタンを追加し、次のコードを追加しました。

更新しました

NSHipsterのサイトにもほぼ同じコードが書かれています

更新しました

警告!このバグは非常にランダムなデバイスで再現されます (私の場合は iphone5 + ios9.0 ですが、他のユーザーはより新しいデバイスと iOS9.1 を使用しています)。

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

ios - StaticString を使用した Swift でのスウィズリング

StaticString パラメータを含む Swift 関数をスウィズルしようとしています。

これが私が試したものです:

ただし、これは機能しません。str の型を String に変更すると、適切にスウィズルできます。StaticString 型パラメーターを使用して関数をスウィズルする機会がある人は誰でも助けてくれますか?

ありがとう

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

objective-c - Objective-Cでのメソッドスウィズリングの適切な方法

swizzling現在、Objective-Cでメソッドを試していますが、質問があります。私はスウィズルをメソッド化する適切な方法を理解しようとしており、オンラインで調査した後、この NSHipster の投稿に出くわしました :

投稿では、著者はサンプルコードを入れ替えるメソッドをいくつか持っています。著者が何をしているのかをよりよく説明してくれる人を探しています。特に、didAddMethod論理について混乱しています。なぜ著者は直接swapping/exchangingメソッドの実装だけではないのですか? これに関する私の唯一の理論は、まだviewWillAppear:追加されていない可能性があるということですUIViewController's method dispatch_table。特に、カテゴリが最初にメモリにロードされている場合はUIViewController...これが理由ですか? かなり奇妙に思えますか?もう少し洞察/明確さを探しているだけです、ありがとう:)

0 投票する
4 に答える
825 参照

c# - C# メソッドの Exchange 実装

Objective-C でのメソッド スウィズリングのように、C# でメソッドの実装を交換することは可能ですか?

そのため、実行時に既存の実装を (外部ソースから、たとえば dll を介して) 自分のものに置き換える (または別の実装を追加する) ことができます。

私はこれを検索しましたが、価値のあるものは何も見つかりませんでした。