ios - 为什么子类化是不可取的?

标签 ios objective-c oop

为什么 UIApplication 类需要一个委托(delegate)来代表它完成“事情”?为什么这个类不能直接做“事情”而不需要中间对象(例如委托(delegate))?该原则的目的是什么?

以同样的方式,我问自己:为什么不能直接访问键盘来关闭它?为什么需要向 View Controller 发出委托(delegate)信号以退出第一响应者?

最佳答案

委托(delegate)是一种核心设计模式。它允许程序各部分之间的职责分离。这个想法是,例如,程序中绘制到屏幕的部分可能不应该与数据库通信。造成这种情况的原因有以下几个:

  1. 性能:如果绘制到屏幕的同一对象访问您的数据存储,您将遇到性能问题。时期。句号。

  2. 代码维护:更容易概念化正确模块化的代码。 (无论如何,对我来说)

  3. 灵活性:如果您在代码中进行子类化,那就太好了 - 直到您开始遇到具有各种不良行为的整体类。您将达到必须重载行为才能将其关闭的程度,并且您的属性命名空间可能会受到污染。尝试使用类别、委派和 block 等替代方案。正如所罗门王在《传道书》中所说:日光之下,万事皆有其时间和地点。

为了更轻松地编写、阅读、迭代和维护程序,强烈建议您遵循某些实践。欢迎您对许多类进行子类化,Apple 不会因为代码不佳而拒绝您的应用程序,前提是它按照广告中的方式运行。也就是说,如果你不遵守经过验证的具体做法,你就是在自掘坟墓。子传递本质上并不是坏事,但类别、协议(protocol)和 block 是如此令人着迷,无论如何我都更喜欢它们。

关于ios - 为什么子类化是不可取的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402603/

相关文章:

ios - 如果没有要加载的图像,如何更改 TableView 的大小

java - 当基类的构造函数需要参数时,我被迫在子类中调用 super 构造函数,否则不需要?

ios - 在单元格内的 UIImageView 上点击手势不会触发

ios - 适用于 iOS 的 Google Places API 与 Google Places Web 服务

c# - 这种聚合设计模式有名称吗?

ios - 从 Objective C 中的父类(super class)初始化子类

ios - 将 iOS 应用移植到 OSX (mac)?

ios - Iphone 5 状态栏被 React Native 覆盖

iphone - 如何将带有参数的 block 传递给方法

ios - viewDidLoad 方法命名是否具有误导性?