1

iOS でデリゲート (プロトコル) メソッドをフックしたいのですが、その方法を教えてくれる人はいますか?

フック方式などapplicationDidFinishLaunching:

私はこのようにしていますが、うまくいきません...

extern IMP original_UIApplication_applicationDidFinishLaunching;
extern void replaced_UIApplication_applicationDidFinishLaunching(UIApplication<UIApplicationDelegate> * self, SEL cmd, UIApplication* application); 

MSHookMessageEx(objc_getMetaClass("UIApplication"),
                @selector(applicationDidFinishLaunching:), 
                (IMP)replaced_UIApplication_applicationDidFinishLaunching, 
                (IMP *)&original_UIApplication_applicationDidFinishLaunching); 
4

2 に答える 2

0

applicationDidFinishLaunching は、UIApplication 自体ではなく、アプリケーション DELEGATE によって実装されるメソッドです。UIApplication でメソッドを入れ替える必要がある理由はまったくありません。これらのメソッドをデリゲートに実装するだけです。

Apple が提供するクラスのメソッドをオーバーライドしたい場合は、それらにカテゴリを作成することで実行できます。追加されたカテゴリ メソッドは、同じメソッド シグネチャによってシステム メソッドをオーバーライドします。

于 2012-12-10T09:08:41.893 に答える