为什么nib loading加载我的类别?

时间:2012-01-06 14:23:08

标签: objective-c macos cocoa

我已将NSScrollView扩展为非翻转类别(默认情况下,它被翻转)。然后我使用Interface Builder将NSScrollView添加到我的应用程序中。翻转NSScrollView。

这怎么可能发生?我没有在我的项目中的任何源文件中包含我的类别。我只编译它似乎在某种程度上是足够的。我确实做了一个干净的构建,只是为了安全。

最重要的是:我怎样才能改变这种行为?我不希望我的笔尖自动获取他们可以找到的所有类别,另一方面,它有时可以方便地包含它们。但我总是把类别视为选择加入,而不是选择退出,因为这似乎就在这里。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

类别适用于整个班级;程序中的所有NSScrollView ANYWHERE实例都将获取新行为。因此,覆盖类别中的现有方法通常不是一个好主意;您正在为该类的所有用户更改该方法的行为,而不仅仅是您自己的实例。

所以类别既不是选择加入也不是选择退出;它们是绝对的,压倒一切的。如果将类别编译到程序中,那么该类将受到影响的每个实例。他们既不会选择也不会选择退出;运行时强制将新行为强加给它们。使用类别时请记住这一点。

如果你想改变某些实例的行为,那么你应该创建一个NSScrollView的子类(称之为UnflippedScrollView或其他东西)并覆盖那里的方法。然后使用您需要未滚动滚动视图的子类。