ios - 混合和 super

标签 ios cocoa-touch objective-c-runtime

我正在尝试调整 canPerformAction:withSender: UIResponder 的方法及其所有已覆盖此方法的子类。

我通过将原始实现存储在以类名作为键的字典中来做到这一点;并在调用原始实现之前在实现的混合版本中查找字典。

这在某些情况下似乎工作正常,但当原始实现调用 super 时失败。然后我的 swizzled 方法不断被调用,程序进入无限递归。

这里可能出了什么问题?

最佳答案

-original-custom 调配后:

-(void)custom {
    [self custom]; // calls -original
}

-(void)original {
    [self original]; // calls -custom
}

也就是说,如果您在父类(super class)中调配了方法,objc_msgSendSuper 将做同样的事情:为自定义调用原始方法,为递归调用相反的方法。


-(void)custom {
    [self original]; // calls -custom, makes recursion
}

 -(void)original {
    [self custom]; // calls -original, makes recursion
}

关于ios - 混合和 super ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11504133/

相关文章:

ios - 如何在Pickerview中保存不同类别的tableviewCell的数据?

iphone - 全屏 UIScrollView 无法正常工作

objective-c - 什么是 Objective-C 运行时中的类处理程序回调?

ios - `[AnyObject]` 到 NSMutableArray

ios - 无法使用 "v1/vault/credit-cards"在 Paypal 中存储信用卡

objective-c - 从类方法访问 IB 对象/控件

ios - 调试 IBDesignable - 调试选定的 View 不工作

objective-c - 如何从 ARC 下运行时定义的类方法返回结构值?

ios - method_setImplementation() 是原子的吗?

iphone - 这个原始变量的初始化是否正确?