【问题标题】:How to call the original method from swizzled one?如何从 swizzled 调用原始方法?
【发布时间】:2023-03-15 09:20:01
【问题描述】:

如何调用 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

【问题讨论】:

标签: objective-c


【解决方案1】:

答案很有意思:

[self swizzledMethod]; // will call originalMethod

【讨论】:

    【解决方案2】:

    我已经为 iOS 5 创建了方法 swizzling

    我在这里做了一个解释。

    Method Swizzling in iOS 5?

    基本上每个对原始方法的调用都是由你调用的。因此,对您的方法的每次调用都应直接返回到原始方法。 (如果调酒器设置正确)

    希望有帮助

    【讨论】:

      【解决方案3】:

      调用您自己的方法...您调整了指针而不是名称。 例如

      originalFunc=$123 myFunc=$321

      调酒 =>

      originalFunc=$321 myFunc=$123

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

      【讨论】:

      • @Altaveron 是对的,我只是再次解释它,因为我第一次也喜欢它......几次:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2021-04-30
      相关资源
      最近更新 更多