Objective c 包含的类别是否会传播到其他包含的文件?

Objective c 包含的类别是否会传播到其他包含的文件?,objective-c,unit-testing,categories,propagation,Objective C,Unit Testing,Categories,Propagation,所以,基本上这就是我想要做的。我正在测试一个类,为了做到这一点,我想重新定义“今天”(或“现在”),这意味着我可以测试日期转换和其他相关属性,只需声明,比如说,“明天就是现在”,然后编写断言 我的想法是在NSDate(NSDate+Test)上设置一个自定义测试类别。但是,在这一刻,我不再确定该类别将如何以及在何处传播。我的意思是,我的被测类(使用NSDate)会自动开始使用NSDate+test吗 仅举例说明: #include "MyClassUnderTest.h" #include "N

所以,基本上这就是我想要做的。我正在测试一个类,为了做到这一点,我想重新定义“今天”(或“现在”),这意味着我可以测试日期转换和其他相关属性,只需声明,比如说,“明天就是现在”,然后编写断言

我的想法是在NSDate(NSDate+Test)上设置一个自定义测试类别。但是,在这一刻,我不再确定该类别将如何以及在何处传播。我的意思是,我的被测类(使用NSDate)会自动开始使用NSDate+test吗

仅举例说明:

#include "MyClassUnderTest.h"
#include "NSDate+Test.h"

// Will MyClassUnderTest.h see and use NSDate+Test at all times?

运行时会很高兴地将这些方法添加到
NSDate
,但如果您试图发送一条未声明的消息,编译器将出错*

因此,只要导入头,类就可以使用新方法

如果您谈论的是“重写”某个类别中框架类的方法,那么您应该知道,在流程中使用该方法的每一次都将使用新版本。因此,如果你点击
+[NSDate date]
,即使是对
date
的内部调用也会使用你的版本。**这很容易导致奇怪甚至危险的行为。你应该更喜欢嘲笑而不是这种责骂

还请注意,由于这种现象,您应该始终为通过类别添加到框架类的方法添加前缀


*至少在弧形下


**假设
date
最初不是在一个类别中实现的;在这种情况下,结果是“未定义的行为”。

好的,非常感谢!这正是我所怀疑的,但我并不清楚原因。现在我知道了!