2012-11-08 51 views
5

如何從調整的方法調用原始方法?如何從調整的方法調用原始方法?

最初的方法是替換代碼:

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

鏈接的問題:http://stackoverflow.com/questions/11504133/swizzling-and-super – Dmitry

回答

14

答案很有意思:

[self swizzledMethod]; // will call originalMethod 
0

調用自己的方法......你swizzeled的指針,但是沒有名字。 例如

originalFunc = $ 123 myFunc的= $ 321

調酒=>

originalFunc = $ 321 myFunc的= $ 123

所以打電話給原來的$ 123,我們現在稱之爲myFunc的

+0

@Altaveron是正確的,我只是再次解釋它因爲我第一次......也是這麼做的:D –

3

我去了通過創建方法調整iOS 5

我在這裏提出了一個解釋。

Method Swizzling in iOS 5?

基本上原來的方法每次調用是要你的。因此,您的方法的每個電話都應該回到原來的位置。 (如果調酒正確設置了)

希望幫助

相關問題