6

スウィズルされたメソッドから元のメソッドを呼び出す方法は?

元のメソッドは次のコードに置き換えられます。

[[UIWindow class] jr_swizzleMethod:@selector(originalMethod) withMethod:@selector(swizzledMethod) error:nil];

次のコードswizzledMethodは再帰を行います!

[self originalMethod];

この問題を解決するには?

スウィズルには次のライブラリを使用します。

// JRSwizzle.h semver:1.0
//   Copyright (c) 2007-2011 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
//   Some rights reserved: http://opensource.org/licenses/MIT
//   https://github.com/rentzsch/jrswizzle

#import <Foundation/Foundation.h>

@interface NSObject (JRSwizzle)

+ (BOOL)jr_swizzleMethod:(SEL)origSel_ withMethod:(SEL)altSel_ error:(NSError**)error_;
+ (BOOL)jr_swizzleClassMethod:(SEL)origSel_ withClassMethod:(SEL)altSel_ error:(NSError**)error_;

@end
4

3 に答える 3

20

答えは非常に興味深いです。

[self swizzledMethod]; // will call originalMethod
于 2012-11-08T17:42:10.350 に答える
3

iOS 5 用のメソッド スウィズリングを作成しました。

ここにその説明を掲載しました。

iOS 5 のメソッド スウィズリング?

基本的に、元のメソッドへのすべての呼び出しはあなたのものになります。したがって、メソッドへのすべての呼び出しは、元のメソッドに戻す必要があります。(スウィズルが正しく設定されている場合)

それが役立つことを願っています

于 2012-11-09T00:13:03.340 に答える
0

独自のメソッドを呼び出します...ポインターはスウィズルしましたが、名前はスウィズルしませんでした。例えば

originalFunc=$123 myFunc=$321

スウィズル =>

originalFunc=$321 myFunc=$123

元の $123 を呼び出すには、myFunc を呼び出します

于 2012-11-09T00:08:11.700 に答える