6

如何从 swizzled 调用原始方法?

原来的方法换成代码:

[[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 创建方法 swizzling

我在这里做了一个解释。

iOS 5 中的方法 Swizzling?

基本上每个对原始方法的调用都是由你调用的。因此,对您的方法的每次调用都应该被引导回原来的方法。(如果调酒器设置正确)

希望有帮助

于 2012-11-09T00:13:03.340 回答
0

调用您自己的方法...您调整了指针,但没有调整名称。例如

originalFunc=$123 我的Func=$321

调酒=>

originalFunc=$321 我的Func=$123

所以要调用原来的 123 美元,我们现在调用 myFunc

于 2012-11-09T00:08:11.700 回答