我阅读了“SOLID”原则的解释。以下是“L”部分的解释:



所以例如我有 MYViewController : UIViewController
当我覆盖 viewDidLoad 时,这意味着我更改了基本 View Controller 的逻辑。正确的?这是否意味着我 改变了该程序 的正确性?

还是我误解了这一点?

最佳答案

您覆盖 viewDidLoad 的事实并不违反 Liskov 替换原则 (LSP)。 (子类的功能通常是扩展父类(super class)的行为。)实际上是相反的,如果您在子类中实现行为,则您违反了此 LSP,从而在您引用的情况下无法再使用它基类。

但是 LSP 并不是我们考虑完全不同的类(例如冰淇淋对象;哈哈)的情况。我们通常关心我们在哪里处理实际的子类,但不能再替换对其基类的引用。

重写方法时,如果代码适当调用了super实现,一般满足LSP。对于您关于 viewDidLoad 的问题,在这种情况下您总是想调用 super

关于objective-c - SOLID 原则如何应用于 Objective-C 中的方法覆盖?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34751727/

10-12 14:26