問題タブ [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.
java - Javaによる自動ポインタスウィズリング?
次のようなノードとポインターで表される任意のグラフがあるとします。
ここで、そのコピーを取得するか、ディスクに書き込み/読み取りを行いたいと考えています (AKA シリアライズ/デシリアライズ)。また、検索アルゴリズム + 連想配列を使用して実行できることも知っています。そして、この方法はスウィズリングと呼ばれていることがわかりました。
ここに私の質問があります:
Java では、クラスを Serializable として宣言することにより、この機能が自動的に提供されると聞いています。(私には魔法のように聞こえます!)
この記述は正しいですか?Java は自動的に BFS を実行してグラフをトラバースし、ポインターをスウィズルしますか? 言い換えれば、シリアル化/逆シリアル化はオブジェクトのクローンを作成しますか? (同じ構造で新しいノードと更新されたポインタを持つ完全に新しいオブジェクト)
はいの場合、ポインタをコピーしたいだけの場合はどうなりますか? 元のポインターを保持するためだけにオブジェクトをシリアル化したい場合はどうすればよいですか?
これについてのコメントをお待ちしております。:-)
objective-c - クラスではなく単一のインスタンスをスウィズルする
私は NSObject のカテゴリを持っています。オブジェクトでそれを呼び出すとき、その dealloc メソッドをオーバーライドしてクリーンアップを行いたいと考えています。
メソッドスウィズリングを使用してやりたかったのですが、方法がわかりませんでした。私が見つけた唯一の例は、クラス全体のメソッド実装を置き換える方法に関するものです (私の場合、すべての NSObject の dealloc をオーバーライドしますが、これは望ましくありません)。
NSObject の特定のインスタンスの dealloc メソッドをオーバーライドしたいと考えています。
objective-c - 動的ライブラリを使用した Objective C メソッドのスウィズリング
メソッドスウィズリングを学ぼうとしています。クラス内のメソッドを呼び出すだけの目的の C でプログラムを作成しました。現在、DYLD_INSERT_LIBRARIES を使用して動的ライブラリをロードしようとしているため、動的ライブラリで定義されている新しいメソッドでメソッドの実装をオーバーライドできます。目的は、引数を変更してから、元の関数呼び出しを呼び出すことです。
プログラム コードは、http://pastebin.com/a0b3qkgB で入手できます。ダイナミック ライブラリのコードは、http: //pastebin.com/Ndf6VdUtで入手できます。
行「if (self == [Encryption class]) {」が動的ライブラリで実行されるとすぐに、コードにクラス名が表示され、奇妙なメッセージが吐き出されることがわかりました。完全な出力:
コードの何が問題なのかわかりません。どんな助けでも大歓迎です。
目的は、動的ライブラリ (コード インジェクション) を使用して目的の C メソッドをオーバーライドすることです。
objective-c - Lion / Xcode 4.3.1 での ShareKit メソッドのスウィズリング?
最近、iOS 5 SDK を使用して Lion と Xcode 4.3.1 にアップグレードしましたが、共有ライブラリのShareKitが壊れています。メール ハンドラーにメソッド スウィズリングを使用していました。どうやら Apple は、メソッドの入れ替えを禁止するか、少なくとも段階的に廃止しようと試みているようです。
ShareKit は、</usr/include/objc/objc-class.h>
もはや存在しないファイルをインポートし、独自のメソッド スウィズリング メソッドを定義しますSHKSwizzle
。これを使用して、MFMailComposeViewController
のviewDidDisappear:
メソッドを次のように変更します。
これを回避するための最善かつ最も簡単な方法は何だと思いますか?
objective-c - UITableViewCellAccessoryType の問題を引き起こす UIButton のスウィズリング
UIButton
が trueの場合に 'sをスウィズルするクラスbuttonType
がUIButtonTypeCustom
あります。ただし、これは、使用される場合にも当てはまりUITableViewCellAccessoryCheckmark
ますUITableViewCellAccessoryDisclosure
。何が起こっているかというと、何らかの理由で、それらをスウィズルして、何らかの理由でカスタム背景などを背後に追加しているというaccessoryType
ことです。
UIButton
私がする必要があるのは、スウィズルしようとしている が であるかどうかを確認することですが、UITableViewCellAccessoryType
そのようなことを行う方法がわかりません。
をスウィズルするために使用している関数の内部は次のとおりUIButton
です。
どんな助けでも大歓迎です!
objective-c - ファインダーでスウィズリングするSIMBL
MacOsFinderのドロップボックスのようなアイコンオーバーレイをSIMBLプラグインと統合することができました。swizzleメソッドを使用して、いくつかのファインダー関数をオーバーライドします。
これが私のスウィズルメソッドです:
したがって、今のところ、次のようにdrawWithFrameメソッドをオーバーライドします。
すべてのアイコンが表示されますが、デスクトップやアイテムをアイコンとして表示するビューには表示されません...なぜですか?
ありがとうございました 、
objective-c - 私のisa-swizzlingはKVOを壊します
特定のオブジェクトのdeallocメソッドでいくつかのアクションを実行する必要があるため、isaスウィズリングを実装しようとしています。私はオーバーライドしています-(クラス)クラス; 元のクラスを返すメソッド(KVOのように)。スウィズルされたオブジェクトにオブザーバーを追加しようとするまで、すべてが正常に機能します。クラッシュするだけです。
- 0x00000000の0x00000000()
- _NSKeyValueRetainedObservationInfoForObjectの0x0091d22a()
- 0x0092ec88 in-[NSObject(NSKeyValueObserverRegistration)_addObserver:forProperty:options:context:]()
- 0x0092d6fd in-[NSObject(NSKeyValueObserverRegistration)addObserver:forKeyPath:options:context:]()
これがスウィズリングの実装です
MDDummyは、従来の方法でクラスを保持するメソッドにすぎません(これとraw関数の追加に違いはありません)。
編集:
class_addMethodFromClass関数の実装は次のとおりです。
objective-c - NSArray (または他のクラス クラスター) をモンキー パッチまたはスウィズルする方法はありますか?
今日、私は のすべてのインスタンスに対して代替メソッドを「エイリアス」したいプロジェクトに取り組んでいましたが、古き良きメソッドのスウィズリングNSArray
ではそれほど難しいとは思いませんでした。
私はJRSwizzleを始めて…</p>
[NSArray jr_swizzleMethod:@selector(objectAtIndex:) withMethod:@selector(objectAtIndex_accordingToMe:) error:nil];
NSArray
明確にするために、これを適切なカテゴリ on 、 と呼ばれるインスタンス メソッドと組み合わせましたobjectAtIndex_accordingToMe:
。
ただし、同じ古い index で、同じ古いオブジェクトを取得していました。はぁ。最終的に、エラーをスローしていないにもかかわらず、クラスクラスターであるため、これらの結果を達成できないことがわかりましたNSArray
私の質問は、「これ」が実際にNSArray
メソッドをオーバーライドしようとする道の終わりであることを受け入れたくないということだと思います。つまり、これはNSArray
..人々はそれをいじりたがっているに違いありません。Apple の基礎クラスは、世界中のスウィズラーにとって主要なターゲットになると考える人もいるでしょう。
それで、変更、エイリアス、monkey-patch、オーバーライド、またはその他の方法で…NSArrayなどを(サブクラス化せずに)使用する方法はありますか?
objective-c - iOSがファイルの読み取りと書き込みに使用する関数/システムコール
一部のアプリに透過的な暗号化/復号化機能を提供するために、iOSでファイルの読み取り/書き込みをインターセプトしたいと思います。
これを行うためにファイルを読み書きするためのさまざまなSDKメソッドをスウィズルできることは知っていますが、これには多くのハードワークが必要であり、エラーが発生しやすくなります(一部のメソッドのスウィズルを見逃して、アプリケーションがクラッシュ/誤動作する可能性があります)。
これらすべてのメソッドで使用される一般的なシステムコール/関数がある場合は、それをスウィズルして、ハードワークを節約し、より確実なものにします。そのような一般的なエントリポイントはありますか?
PS:これらのアプリはすべて社内での展開用であるため、アプリストアへの受け入れはここでは基準ではありません。
ありがとう!
objective-c - プロトコルの実装として使用して、すべてのオブジェクトのメソッドを置き換えることは可能ですか?
プロトコルの実装として使用して、すべてのオブジェクトのメソッドを置き換えることは可能ですか?
方法はcanPerformAction:(SEL)action withSender:(id)sender
次のとおりです。
最初の問題:UIWebViewの「切り取り、コピー、貼り付け」および「選択、すべて選択」ポップアップメニューを無効にできない。奇妙なオブジェクトがそのcanPerformAction
メソッドでそれらを生成します。そして、そのクラスでのみメソッドを置き換えるこのオブジェクトを見つけることができません。
どうぞよろしくお願いいたします。この問題を長い間解決することはできません。選択を無効にする他のすべての方法も、私のページでのユーザー入力を無効にします。canPerformAction
そして、私はそれを機能させるために正しいクラスまたはすべてのクラスのメソッドを置き換えるだけかもしれません。