1

SIMBL を使用して NSMenuItems のサード パーティ アプリケーションの作成をメソッド スウィズリングしていますが、メソッド スウィズリングが初期化される前に、50/50 の時間でメニュー項目が作成されます。

スウィズルが常に最初に来るようにするためのクリーンな方法は何ですか? applicationDidFinishLaunching: をスウィズルして、そこでスウィズルを続けることができると思います。しかし、実際のスウィズルが配置される前に applicationDidFinishLaunching が呼び出されるという同じエラーが発生するのではないかと心配しています。

ジョン

4

2 に答える 2

2

ライブラリがロードされるとすぐにスウィズルが発生するようにします。+initialize+load、またはコンストラクター関数を介してそれを行うことができます。

この質問に対する@bbum の回答には、これらの特別なクラス メソッドを使用する際の注意事項に関する彼のブログ投稿の 1 つと共に、もう少し詳しい情報があります。

(そして、私は意図的にあなたがしていることの知恵に疑問を呈していません;))

于 2011-01-13T00:45:36.713 に答える
2

次のようなコンストラクタ関数を使用できます。

__attribute__((constructor)) static void do_the_swizzles()
{
    // Do all your swizzling here.
}

GCCのドキュメントから:

このconstructor属性により、実行が開始される前に関数が自動的に呼び出されますmain()

注:これは元は からGCCのものですが、でも機能しLLVMます。

于 2012-06-16T16:08:32.523 に答える