2011-01-14 49 views

回答

12

除非你不想让你的任何对象相互交谈,或者除非你想使用纯粹的动态类型(每个变量类型为id,几乎没有编译时的完整性检查)并且没有子类化任何你自己的类的意图。

如果在头文件中没有@interface,则不能将该@interface导入另一个类的实现文件中,以使其方法和属性声明可用。在头文件中使用@implementation,您将会看到链接错误,因为预处理器会将@implementation复制到所有位置。

随着@interface S IN头文件和@implementation S IN实现文件,您的每个@implementation恰好一个实现文件,以及@interface的可用无论你需要他们,这样既可以使编译器做更多的检查和编辑器提供更多更智能的完成。我不明白为什么你想在Objective-C中切换到单个文件类模式。

+0

我已经把一个类的接口和实现放在一个文件之前,但它是一个私人类(或类别),所以它是在类的实现文件用它。 – ughoavgfhw 2011-01-14 07:44:22

+0

@ughoavgfhw:是的,它适用于仅作为另一个类的实现细节存在的类或类别。不过,你不能为你的公共类(在你的应用程序中被其他对象/类使用)执行此操作。 – 2011-01-14 08:43:36

0

在实现文件中使用接口

您可以在包含实现的.m文件中编写接口。

+0

ThankYoy为答案.... – Nitish 2011-01-17 11:26:22

3

我们可以在一个可可中使用接口和实现文件吗?

是的,你可以。实际上,当我有一个类工厂时,我经常这样做,并根据传入的参数给出不同子类的实例。

如果是,那么在哪个文件中使用哪个文件?

.m文件中的所有内容。如果你把它全部放在.h文件中,它就不会被编译,除非你将.h文件包含在某个.m文件中。要注意的是,尽管就编译器而言,这给你类似于静态变量的文件范围,但就链接器而言,类符号仍然是全局范围的。如果在不同的.m文件中有两个相同名称的类,则该链接可能会失败并出现重复的符号错误或两个错误。

相关问题