我正在尝试为 UIResponder 及其所有覆盖此方法的子类调整 canPerformAction:withSender: 方法。
我通过将原始实现存储在由类名键入的字典中来做到这一点;并在调用原始实现之前在实现的混合版本中查找字典。
这在某些情况下似乎可以正常工作,但是当原始实现调用 super 时会失败。然后我的 swizzled 方法不断被调用,程序进入无限递归。
这里有什么问题?
我正在尝试为 UIResponder 及其所有覆盖此方法的子类调整 canPerformAction:withSender: 方法。
我通过将原始实现存储在由类名键入的字典中来做到这一点;并在调用原始实现之前在实现的混合版本中查找字典。
这在某些情况下似乎可以正常工作,但是当原始实现调用 super 时会失败。然后我的 swizzled 方法不断被调用,程序进入无限递归。
这里有什么问题?
调酒后-original
with -custom
:
-(void)custom {
[self custom]; // calls -original
}
-(void)original {
[self original]; // calls -custom
}
说过,如果您在超类中混合了方法, objc_msgSendSuper 也会这样做:为自定义调用 original ,反之亦然,为您提供递归。
-(void)custom {
[self original]; // calls -custom, makes recursion
}
-(void)original {
[self custom]; // calls -original, makes recursion
}