可以这样简化问题:我们的库有3个视图控制器-MainController
,SecondController
和ThirdController
。 MainController
是我们在个人项目中创建的实例;它有一个转换为SecondController
的按钮,它有一个转换为ThirdController
的按钮。 ThirdController
有一个连接到方法的按钮:
-(void)buttonPressed{
NSLog("Button has been pressed!");
}
假设
MainController
导入SecondController.h
,SecondController
导入ThirdController.h
。除了覆盖
buttonPressed
之外,我们希望保持库不变,以便它呈现我们个人项目中的视图控制器,因此我们将ThirdController
子类化为CustomThirdController
并覆盖buttonPressed
来完成我们想要的工作。如果现在将MainController.h
导入到我们的项目中并创建MainController
的实例,则它将不会使用新的CustomThirdController
子类。我们如何使用子类而不对库中的所有3个控制器进行子类化? 最佳答案
分叉并更改它,引入代理或添加更多自定义选项。如果您对此进行了改进,则可以将拉取请求发送回作者。
更新:
对于猴子修补,如果要替换现有类中的单个方法,请使用category。
在最坏的情况下,您可以求助于方法混乱。