1

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

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

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

这里有什么问题?

4

1 回答 1

2

调酒后-originalwith -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
}
于 2012-07-16T12:23:13.583 回答