代码之家  ›  专栏  ›  技术社区  ›  Manjunath

如何避免Objective-C中的子类重写超类方法

  •  10
  • Manjunath  · 技术社区  · 16 年前

    就像在Java中:

    最终的 类不能是子类。这是为了 安全高效的原因 . 因此,许多Java标准库类是最终的,例如JavaLang.Stand和JavaLang.Stand。final类中的所有方法都是隐式final。

    如何在目标C中实现这种行为?

    3 回复  |  直到 14 年前
        1
  •  11
  •   hooleyhoop    16 年前

    你不能。效率不在其中。如果你担心安全问题,不要使用Objective-C。总会有办法绕过你采取的任何措施。

        2
  •  7
  •   Williham Totland    16 年前

    正如很多次所说,你不能。

    但是,如果您正在创建一个库(这是我能看到的唯一相关的库),您可以采取一些步骤。好吧,一个,真的。

    在类的文档中写下,“这个类不用于子类化。”(参考 NSIndexSet 或“ 不要重写此方法。 “(参考文献) +[NSApplication sharedApplication] .

    作为一种解释方式,值得注意的是(几乎大部分)obj-c中发生的所有事情,以及将其与c分开的事情,都是在运行时发生的,所以说运行时“就在那里”。任何一段代码都可以随意检查、变异或歪曲运行时,使obj-c成为一种非常强大的语言,特别是在其“元语言”结构方面。

        3
  •  4
  •   mfazekas    16 年前

    在Objective-C中没有最终的等价物。有相同的模式可能是很好的替代方案,它们将为您提供更好的分离,但性能和安全性都不是:

    1. 如果只希望使用 delegate 模式可能是更好的选择。
    2. 如果您根本不希望子类化,那么可以使用 abstract factory 模式。声明一个公共接口+工厂方法,并隐藏具体的实现类。