Iphone 如果我重写一个类方法,有没有办法调用原始方法(被重写的方法)?
在Objective-C中,如果我使用一个类别重写一个类方法,有没有办法调用原始方法(被重写的方法)? 看起来不可能 当一个类别重写继承的方法时,该类别中的方法可以像往常一样,通过发送给super的消息调用继承的实现。但是,如果类别重写了类别类中已经存在的方法,则无法调用原始实现Iphone 如果我重写一个类方法,有没有办法调用原始方法(被重写的方法)?,iphone,objective-c,ipad,ios,Iphone,Objective C,Ipad,Ios,在Objective-C中,如果我使用一个类别重写一个类方法,有没有办法调用原始方法(被重写的方法)? 看起来不可能 当一个类别重写继承的方法时,该类别中的方法可以像往常一样,通过发送给super的消息调用继承的实现。但是,如果类别重写了类别类中已经存在的方法,则无法调用原始实现 这对我来说意味着,如果你通过一个类别覆盖子类上的一个方法,你可以像平常一样调用[super methodName],但是如果你直接覆盖基类方法,你就不能调用原始方法 如果动态提供类别覆盖(请参见resolveInsta
这对我来说意味着,如果你通过一个类别覆盖子类上的一个方法,你可以像平常一样调用[super methodName],但是如果你直接覆盖基类方法,你就不能调用原始方法 如果动态提供类别覆盖(请参见resolveInstanceMethod:),则可以预先缓存以前的方法选择器,并调用它。在
+(void)load
中,我为您提供了三种方法。在任何情况下,请将您的方法命名为MyCategory\u方法或其他名称
- 类_getMethodImplementation()和类_replaceMethod()。存储旧的IMP,并直接调用它。您需要获取方法的类型编码。请注意,您也可以使用普通的C函数
- 类\u getInstanceMethod()、方法\u getImplementation()、方法\u setImplementation()。如上所述,但不需要获取方法的类型编码李>
- 在这两个方法上初始化\u getInstanceMethod(),然后在方法\u ExchangeImplements()上初始化。调用MyCategory_方法以获取原始实现。这是最简单的方法
编辑:并且只有在您知道自己在做什么的情况下才能执行此操作 这是可能的,但不是不喝。但是,不要那样做。最终,它会带来比解决问题更多的问题说真的,谢谢你的帮助!