1

我这听起来可能是一个愚蠢的问题,但我仍然害怕这样做。因为我想覆盖一个 NSObject 方法,即 addObserver: 与一个类别。它对系统上运行的其他应用程序有影响吗?

4

3 回答 3

2

覆盖addObserver:forKeyPath:option:contex不是一个好主意。从类别实现中,您不能调用方法的super实现,这基本上意味着永远不会添加任何观察者。

虽然这只会影响你的应用程序,但它会在全球范围内这样做,这意味着即使是外部框架也会受到影响,比如 UIKit 或 Fundation。

于 2013-01-18T14:27:14.117 回答
1

尽管当前 Objective-C 语言允许您使用类别来覆盖类继承的方法,甚至是类接口中声明的方法,但强烈建议您不要这样做。类别不能替代子类。

关于您的问题它对系统上运行的其他应用程序有影响吗?
答案是大不。它只会影响您的应用程序。

于 2013-01-18T14:32:21.480 回答
0

尽管类别为您提供了向现有类添加新方法的规定。您也可以覆盖现有方法,但在少数情况下,您最终可能会失去对调用哪个方法的控制!!!

有时,即使您覆盖了使用框架方法的方法,也不会考虑您的方法。

所以我建议你不应该使用相同的方法名来覆盖。您可以使用 as 来区分:

addObserverCustom:

于 2013-01-18T14:14:45.833 回答