如何从混合调用原始方法?

时间:2012-11-08 17:28:08

标签: objective-c

如何从混合调用原始方法调用原始方法?

原始方法被代码替换:

[[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

3 个答案:

答案 0 :(得分:17)

答案非常有趣:

[self swizzledMethod]; // will call originalMethod

答案 1 :(得分:3)

我已经为iOS 5创建了方法调配

我在这里解释了它。

Method Swizzling in iOS 5?

基本上每个对原始方法的调用都是针对你的。因此,对您的方法的每次调用都应该回到原始状态。 (如果调配正确)

希望有所帮助

答案 2 :(得分:0)

调用你自己的方法......你swizze指针但不是名字。 e.g。

originalFunc = $ 123 myFunc的= $ 321

swizzle =&gt;

originalFunc = $ 321 myFunc的= $ 123

所以要调用原来的$ 123我们现在调用myFunc