問題タブ [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.
c++ - int を使用した C++ テンプレート配列 operator[]
特別な構造体を操作しようとしていますが、ある種のスウィズル演算子が必要です。このため、オーバーロードされた配列演算子を使用することは理にかなっています[]
が、構造体の特定の仕様により理論的な回避策が可能になるため、分岐はしたくありません。
現在、構造体は次のようになっています。
ブランチを回避するにはどうすればよいですか? 私の考えでは、整数パラメーターを持つテンプレートを使用して特殊化を定義することですが、それが理にかなっているかどうか、およびそのモンスターの構文がどのように見えるかは明らかではありません。
私は明示的に、いかなる状況下でも、float[4]
配列を使用して 2 つをマージすることはできません (また、ユニオン トリックはありません)。その正当な理由が必要な場合は、float[2]
実際には、プラットフォーム固有の PowerPC ペア シングルに似ているためです。通常の Windows コンパイラはペアのシングルでは動作しません。そのため、コードをfloat[2]
s に置き換えました。
GreenHills コンパイラを使用すると、次のアセンブリ出力が得られます (分岐が発生していることを示唆しています)。
そのスニペットに対応する C++ コードは次のようになります。
ios - 大規模なアプリですべての UILabel のフォントを変更する
これはあなたにとって興味深い問題です:
現在、100,000 行以上のコードと 100 近くの XIB ファイルで構成されるアプリ全体のスキンを変更中です。新しいデザインでは、アプリ内の (ほぼ) すべてのラベルに新しいカスタム フォントを使用する必要がありますが、古いアプリでは Helvetica Neue のデフォルト フォントが使用されます。
できるだけ多くの UILabels を変更する最も効率的な方法は何ですか? コードと XIB の両方で何千ものラベルを手動で変更する必要はありません (非システム フォントを使用しているため、これは特に困難です)。
UILabel の作成方法のスウィズリングをデフォルトで新しいカスタム フォントを使用することについて説明しました。これにより、Helvetica Neue に残るいくつかのラベルを作成後にカスタマイズすることができます。
考え?
objective-c - メソッド IMP 間で va_list を渡すには? (目的c)
関数をスウィズルして、関数の引数を使用して元の実装を呼び出そうとしています。新しい IMP の形式は次のとおりです。
args
含まれていないのに _cmd が含まれているため、これは明らかに間違って...
います。
...
originalImpに渡すにはどうすればよいですか?
ios - iOS 静的ライブラリが機能しない
この記事の手順に従って、静的ライブラリを作成しました。
http://developer.apple.com/library/ios/#technotes/iOSStaticLibraries/Articles/creating.html
iPhoneシミュレーターターゲット用に作成しました。正常にビルドされた後、それを使用したい新しいプロジェクトにインポートしました。正常にインポートされ、問題はありませんが、ライブラリが機能しません。私が呼び出しているライブラリ メソッドはありません。ライブラリの目的は、UIViewController が表示されるたびにコードの一部が実行されるように、UIViewController の viewDidAppear メソッドを入れ替えることです。私のライブラリが「Link Binary With Libraries」ビルドフェーズに含まれているにもかかわらず、このコードは呼び出されません。
生の .m および .h ソース ファイルをライブラリとしてではなくインポートすると、すべて正常に動作するため、コード自体に問題がないことはわかっています。
ios - 必要なデバイスから「nil オブジェクトを挿入しようとする試み」をキャッチする方法に関するアドバイス
これが状況です:Hockeyappとtestflightは時々私について不平を言います
「nil オブジェクトを挿入しようとしています」
変更可能な辞書/配列で。私は正しいことは常に nil をチェックすることであり、それが理にかなっているときはそうする..私たちのテスターはそれらのクラッシュをキャッチすることはできませんが、AppStore ユーザーは明らかにできる.
私の推測では、サーバーが返すべきではないときに NSNull を返すことがあります。したがって、巨大なプロジェクトのどこにでも nil のチェックを挿入しないように、テスター用に別のターゲットを作成し、コレクション クラスにメソッド スウィズリングを使用するというのが私の考えでした。オブジェクトが実際にnilinsertObject:atIndex
のswizzled_insertObject:atIndex
場合、クラッシュする前に説明的なレポートをログに記録/表示します。
__NSPlaceholderDictionary
問題は、または__NSArrayM
(プライベート クラスでカテゴリを作成できないという理由だけで) にスウィズリングを使用できないことです。
基本的には、これらの厄介なまれなクラッシュを検出する方法についてアドバイスを求めています。私が念頭に置いている解決策の 1 つは、try-catch ブロックを使用することです。Objective-c ではそれらが高価であることはわかっているため、本番環境では使用せず、テスターのみに使用します。try-catche
ただし、 -s で囲まれたメソッドは、 #ifdef
-- s で囲まれ#endif
ており、コードの可読性がすべて失われます。だから私はよりエレガントなソリューションを探しています。ありがとう。
更新: スタック トレースは残念ながらあまり説明的ではありません。
ios - iOS - EXC_BAD_ACCESS コード = 1 (メソッド スウィズリング) init 後に UIWebView がクラッシュする
アプリをARCに切り替えました。Xcode が提供するリファクタリング ツールのおかげで、移行は部分的に成功しました。動作しない部分は奇妙なエラーです。
メソッドの入れ替え (method_exchangeImplementations) を使用して、UIView の initWithFrame を呼び出す代わりに、myInitWithFrame コードを呼び出すようにしました。リファクタリング プロセスで myInitWithFrame のメソッド宣言でエラーが発生したため、メソッドの宣言の後に__属性__ ((objc_method_family(init))) を追加しました。現在、これはすべて iOS 6.0 以降では完全に正常に機能しますが、iOS 5.0 (サポートしたい最も低い iOS) では機能しません。EXC_BAD_ACCESS (コード = 1、アドレス = 0X28) を取得しています。実行するたびに、まったく同じメモリアドレスが表示されます。
私はそれを呼び出すUIWebViewを持っています:
myInitWithFrame が初期化を行った後、self を返し、クラッシュします。スレッド トレースでは、以下に示すように、[UIWebView 保持] メソッドのリンゴのコード (メソッドはグレー表示) でクラッシュすることが示されています。
画像を投稿するのに十分な担当者がいません。
同じコードが iOS 6.0 では機能するのに、iOS 5.0 では機能しない理由はありますか?
ios - メソッド スウィズリングの実装が行われていない
私はスウィズリングの概念を学ぼうとしています。
を追加しましmethod_exchangeImplementations
たが、まだメソッドが入れ替わっていません。私がどこで間違っているのかについて何か考えはありますか?
ios - UIResponder の Swizzling Copy メソッド
UIResponder の Copy: と Paste: メソッドをいじっています。コピーしたコンテンツをプライベート ペーストボードに書き込む必要があります。
コピーした文字列をペーストボードに書き込むにはどうすればよいですか。私が取得しているパラメータはタイプidです。NSStringに変換すると、このメソッド(UIMenuController)を呼び出しているのは送信者なので適切ではありません。