問題タブ [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 - インスタンスなしでクラスをスウィズルする
スウィズルしようとしている時点で参照していないクラスをスウィズルする必要があります。Class
「インディー」スウィズリング メソッドを使用して、どこからでも任意のクラスをスウィズルできるようにしていますが、参照を取得するにはそのクラスのインスタンスが必要です。
したがって、コード例には次の行があります。
ただし、次のようなことをする必要があります。
またはそのようなもの。これはObjectiveCで可能ですか?
ios - フレームワークでスウィズリングが機能しない
私は iOS フレームワークを開発しており、スウィズリング メソッドを記述する必要があります (UIViewController の viewDidAppear メソッド用)。
私のスウィズル メソッドは、私のアプリケーションで完全に機能します。しかし、ヘッダー + 実装ファイルをフレームワークにカット アンド ペーストしてアプリを起動すると、機能しません。NSLog
メソッドの中に入れましたが、load
何も出力されません。
スウィズリングについては、次のチュートリアルに従いました: http://spin.atomicobject.com/2014/12/30/method-swizzling-objective-c/ 公開ヘッダー内に「UIViewController+Logging.h」を追加しました。
なぜそれが機能しないのですか?
ios - Objective-C でのメソッド スウィズリング
「Objective-C のメソッド スウィズリング」に関する記事を読みました。この記事での「メソッドの交換」の意味は、2 つのメソッドの実装を交換することです。サンプルは次のとおりです。
記事中の一文は
このメソッドは無意味な再帰呼び出しを自分自身に行うように見えるかもしれませんが、スウィズルした後は実際にはそうしません。
しかし、私はこの声明についてあまり明確ではありません.以下のようなコードを書くとき、それは意味しますか?
その実装が「logged_viewDidAppear」になったため、プログラムはメソッド「logged_viewDidAppear」に移動し、そのメソッドでわかるように、最初の行は [self logged_viewDidAppear:animated] です。同じ理由で、メソッドは「viewDidAppear」になります。私の言葉は正しいですか?
ios - クラス メソッドとインスタンス メソッドを入れ替える
クラスメソッドとインスタンスメソッドを入れ替えるという奇妙な要件があります。
基本的に、それらは異なるクラス A と B にあります。A には静的関数と呼ばれる関数があります。
B は関数を持つシングルトンです
そしてそれは機能を持っています
aTest() をスウィズルして B.sharedInstance.bTest() を指すにはどうすればよいですか?
私はそれが非常に奇妙な要求であることを知っています..しかし、私はこれが必要です:)
objective-c - Objective-Cでのメソッドスウィズリングの適切な方法
swizzling
現在、Objective-Cでメソッドを試していますが、質問があります。私はスウィズルをメソッド化する適切な方法を理解しようとしており、オンラインで調査した後、この NSHipster の投稿に出くわしました
:
投稿では、著者はサンプルコードを入れ替えるメソッドをいくつか持っています。著者が何をしているのかをよりよく説明してくれる人を探しています。特に、didAddMethod
論理について混乱しています。なぜ著者は直接swapping/exchanging
メソッドの実装だけではないのですか? これに関する私の唯一の理論は、まだviewWillAppear:
追加されていない可能性があるということですUIViewController's method
dispatch_table
。特に、カテゴリが最初にメモリにロードされている場合はUIViewController
...これが理由ですか? かなり奇妙に思えますか?もう少し洞察/明確さを探しているだけです、ありがとう:)
objective-c - Objective C - IMP と関数ポインタの違いは何ですか?
私は最近、スウィズルを行う必要があるプロジェクトを開始しました。
多くのチュートリアルを経た後、「実装と関数ポインターの違いは何ですか?」という質問がありました。
ios - NSURLConnection クラスの init メソッドをスウィズルする方法
NSURLConnection クラスの init init メソッドをスウィズルしたいのですが、このコードを試してみましたが、うまくいかないようです
そして、ここに私がView Controllerから開始しているリクエストがあります
ios - アプリ外で共有フレームワークのメソッドをスウィズルする
s のSwizzling カテゴリを実装しました。これは、提示されたときに sUIViewController
だけです。NSlog
明らかに、これはスウィズルされたアプリケーション内でのみ正常に機能しますが、共有を「フック」してpresentViewController
、アプリケーションの外部でビューを表示するときに呼び出されるようにすることもできるかどうか疑問に思っていました。私は、グローバルイメージシンボルへのポインターを取得するよりも、UIViewController
動的にロードすることを考えていました。dlopen
出来ますか?そうでない場合は、そうではありませんか?
免責事項 - 私は自分の開発デバイスでデバッグするためにこれを行っており、アプリを App Store にアップロードしません。
objective-c - Swiftを使用してUIApplicationにswizzlingメソッドを追加するには?
UIApplication メソッドにスウィズリング メソッドを使用しようとする以下のコードがあります。しかし、メソッドが呼び出されません。その間、このコードをフレームワークまたはプライベート ポッドに追加しようとしています。
swizzling - プログラムでスウィズリングを定義する (GLSL のように)
プログラミング言語で定義された動作としてスウィズリングをどのように記述しますか? (GLSL の行列やベクトルのようなスウィズリング メンバー) では、一部のメンバーでスウィズリングの定義を可能にするプログラミング言語を作成したい場合、どのようにすればよいでしょうか? たとえば、私はこれを行うことができます:
しかし、これには多くのものが欠けています。たとえば、要素を多かれ少なかれ入れ替えたり、サブセットに割り当てたり、要素を逆方向に割り当てたりすると、何を返すかを定義しません。GLSL のように、v.xyz を実行して、v という Vec4 から Vec3 を作成できます。または、メンバーのサブセットを割り当てることもできます: v.zyx = ... 任意の順序で。
したがって、この切り替え可能な部分構造は解決策ではありません (または、少なくとも制限が多すぎます)。もう 1 つの方法は、swizzled メンバーの配列を返すことであり、暗黙のキャスト (コンストラクターを使用) によって必要な要素が生成されます。
したがって、スウィズリングを介して Vec3 の x と y にアクセスすると、float[2] が得られ、Vec2 のコンストラクターがあるため、この配列をそれに割り当てることができます (暗黙的に vec2 をインスタンス化します)。
これはより良い解決策のように見えますが、それでも: どうすればもっとうまくやれるでしょうか?
編集:申し訳ありませんが、質問を指定しませんでした:この種のことをサポートするプログラミング言語を実装したいです。