可以这样简化问题:我们的库有3个视图控制器-MainControllerSecondControllerThirdControllerMainController是我们在个人项目中创建的实例;它有一个转换为SecondController的按钮,它有一个转换为ThirdController的按钮。 ThirdController有一个连接到方法的按钮:

-(void)buttonPressed{
    NSLog("Button has been pressed!");
}

假设MainController导入SecondController.hSecondController导入ThirdController.h

除了覆盖buttonPressed之外,我们希望保持库不变,以便它呈现我们个人项目中的视图控制器,因此我们将ThirdController子类化为CustomThirdController并覆盖buttonPressed来完成我们想要的工作。如果现在将MainController.h导入到我们的项目中并创建MainController的实例,则它将不会使用新的CustomThirdController子类。我们如何使用子类而不对库中的所有3个控制器进行子类化?

最佳答案

分叉并更改它,引入代理或添加更多自定义选项。如果您对此进行了改进,则可以将拉取请求发送回作者。

更新:

对于猴子修补,如果要替换现有类中的单个方法,请使用category。

在最坏的情况下,您可以求助于方法混乱。

07-28 08:56