問題タブ [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 に答える
2142 参照

java - 'Swizzle' (もしかしたらリフレクションによる?) Android の addView()

Java で実際に Swizzle を実行できないことは承知しています。

私はいくつかの調査を行っていましたが、Java でリフレクションを実行して、Swizzle のような動作 (iOS で実行できる) を実現できる可能性があると思います。

犯人 (そして私が今まで見た中で最悪の設計上の決定の 1 つ) は、addView()すべての Android ViewGroup オブジェクトの関数です。親が null かどうかを明示的に確認する必要があります (必要な動作を得るために親をキャストする必要がある場合もあります!)。きもい。

addView()クライアントコードがこれを無視できるように、メソッドにこのチェックを自動的に実行させることで、(百万のサブクラスを作成せずに) これの動作を変更したいと考えています。

これはリフレクションでできることですか (私が理解していることから、ルートメソッド呼び出しを実際に変更するのではなく、特別なランタイム呼び出しが必要になるので [十分ではないかもしれません])、または何か他のものですか? それとも、間違った木を吠えていますか?

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

ios - インスタンスなしでクラスをスウィズルする

スウィズルしようとしている時点で参照していないクラスをスウィズルする必要があります。Class「インディー」スウィズリング メソッドを使用して、どこからでも任意のクラスをスウィズルできるようにしていますが、参照を取得するにはそのクラスのインスタンスが必要です。

したがって、コード例には次の行があります。

ただし、次のようなことをする必要があります。

またはそのようなもの。これはObjectiveCで可能ですか?

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

ios - フレームワークでスウィズリングが機能しない

私は iOS フレームワークを開発しており、スウィズリング メソッドを記述する必要があります (UIViewController の viewDidAppear メソッド用)。

私のスウィズル メソッドは、私のアプリケーションで完全に機能します。しかし、ヘッダー + 実装ファイルをフレームワークにカット アンド ペーストしてアプリを起動すると、機能しません。NSLogメソッドの中に入れましたが、load何も出力されません。

スウィズリングについては、次のチュートリアルに従いました: http://spin.atomicobject.com/2014/12/30/method-swizzling-objective-c/ 公開ヘッダー内に「UIViewController+Logging.h」を追加しました。

なぜそれが機能しないのですか?

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

ios - Objective-C でのメソッド スウィズリング

「Objective-C のメソッド スウィズリング」に関する記事を読みました。この記事での「メソッドの交換」の意味は、2 つのメソッドの実装を交換することです。サンプルは次のとおりです。

記事中の一文は

このメソッドは無意味な再帰呼び出しを自分自身に行うように見えるかもしれませんが、スウィズルした後は実際にはそうしません。

しかし、私はこの声明についてあまり明確ではありません.以下のようなコードを書くとき、それは意味しますか?

その実装が「logged_viewDidAppear」になったため、プログラムはメソッド「logged_viewDidAppear」に移動し、そのメソッドでわかるように、最初の行は [self logged_viewDidAppear:animated] です。同じ理由で、メソッドは「viewDidAppear」になります。私の言葉は正しいですか?

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

ios - クラス メソッドとインスタンス メソッドを入れ替える

クラスメソッドとインスタンスメソッドを入れ替えるという奇妙な要件があります。

基本的に、それらは異なるクラス A と B にあります。A には静的関数と呼ばれる関数があります。

B は関数を持つシングルトンです

そしてそれは機能を持っています

aTest() をスウィズルして B.sharedInstance.bTest() を指すにはどうすればよいですか?

私はそれが非常に奇妙な要求であることを知っています..しかし、私はこれが必要です:)