Ios 在目标C中使用类别

Ios 在目标C中使用类别,ios,objective-c,objc-category,Ios,Objective C,Objc Category,我有一个名为ViewMessages.m的文件,它变得非常冗长。我想重构并将我的部分方法放入一个单独的文件中。类别似乎是正确的选择,因此我在ViewMessages上创建了一个名为DataEngineViewMessages的类别 它创建了两个文件,DataEngineViewMessages.h和DataEngineViewMessages.m 我的问题:是否需要在原始ViewMessage.h或.m中导入DataEngineViewMessage.h以访问我的新方法?如果编译器看不到方法定义

我有一个名为ViewMessages.m的文件,它变得非常冗长。我想重构并将我的部分方法放入一个单独的文件中。类别似乎是正确的选择,因此我在ViewMessages上创建了一个名为DataEngineViewMessages的类别

它创建了两个文件,DataEngineViewMessages.h和DataEngineViewMessages.m


我的问题:是否需要在原始ViewMessage.h或.m中导入DataEngineViewMessage.h以访问我的新方法?

如果编译器看不到方法定义,任何调用方法的代码都会发出编译器警告。如果编译器不能准确地确定如何处理返回类型,并且您希望它是原子C类型,那么它们也可能会引发错误


为了保持外部接口不受影响,您可能只需在主类头文件的底部添加类别方法的导入。

如果编译器看不到方法定义,任何调用这些方法的代码都会发出编译器警告。如果编译器不能准确地确定如何处理返回类型,并且您希望它是原子C类型,那么它们也可能会引发错误


为了保持外部接口不变,您可能只需在主类头文件的底部为您的类别方法添加一个导入。

而不是添加到.h文件中。类别标题应导入ViewMessages.h,如果需要,类别标题应导入ViewMessages.m。这可以防止任何类型的循环


通常,您希望区分应该在标题中定义为公共的类别方法(可能类似于ViewMessages+DataEngine.h)和在标题中定义为内部使用的类别方法(可能类似于ViewMessages+Private.h)。前者不应包含在ViewMessages中,后者应再次包含在.m文件中。

不应包含在.h文件中。类别标题应导入ViewMessages.h,如果需要,类别标题应导入ViewMessages.m。这可以防止任何类型的循环


通常,您希望区分应该在标题中定义为公共的类别方法(可能类似于ViewMessages+DataEngine.h)和在标题中定义为内部使用的类别方法(可能类似于ViewMessages+Private.h)。前者不应包含在ViewMessages中,后者应再次包含在.m文件中。

如果您从原始类中的类别而不是相反的类别访问方法,这是正常的,那么我会说您的设计不好。如果您从原始类中的类别而不是相反的类别访问方法,这是正常的,那么我会说你没有一个好的设计。如果需要,具体意味着什么?如果我在DataEngine.m中编写我想在ViewMessages.m中使用的方法,是的,完全正确。通常这些方法是私有的,但并不总是。如果这些方法是私有的,我可以简单地在dataengine.h中声明我的方法,在dataengine.m中写入它们,然后在viewmessages.m中导入dataengine.h来使用它们?作为一个附带问题,viewmessage.h中定义的@properties是否可以在dataengine.m中访问?谢谢,是的。因为dataengine.h imports viewmessages.hI刚刚尝试实现上述设计,但是我无法访问dataengine.m中ViewMessage.h的属性,即使我在dataengine.hw中导入ViewMessage.h,如果需要,具体意味着什么?如果我在DataEngine.m中编写我想在ViewMessages.m中使用的方法,是的,完全正确。通常这些方法是私有的,但并不总是。如果这些方法是私有的,我可以简单地在dataengine.h中声明我的方法,在dataengine.m中写入它们,然后在viewmessages.m中导入dataengine.h来使用它们?作为一个附带问题,viewmessage.h中定义的@properties是否可以在dataengine.m中访问?谢谢,是的。因为dataengine.h导入viewmessages.hI刚刚尝试实现上述设计,但是我无法访问dataengine.m中ViewMessage.h的属性,即使我在dataengine.h中导入ViewMessage.h