为什么Objective-C使用头文件而不是像Java这样的单文件类?

2022-09-02 20:35:49

我主要使用Java,最近正试图学习Mac和iOS应用程序开发的Objective-C。现在,这种语言与我习惯的语言完全不同,指针,消息等,但我似乎可以接受它。这不是一个编码问题,但我宁愿适当地熟悉我正在处理的内容,而不仅仅是知道“它必须这样,因为它就是这样”。

为什么 Objective-C 语言需要头文件?它们与 .m 文件分离的实际目的是什么?为什么函数需要在标头中声明,而不是仅仅实现?它只是那些还没有从旧语言中消失的东西之一,还是与Java的单文件类相比,有真正的优势?


答案 1

主要是.h文件的存在是因为C的向下兼容性 - 所有C代码也是有效的Objective-C代码。C编译器一次处理一个文件;每个文件都是独立编译和解析的。C 编译器在首次使用某个符号之前“必须”看到它的声明。因此,如果您在B.m中使用类A,则在某些时候编译器必须看到A的声明;为了避免做类似约定的事情,是将头文件中的声明拆分为.c,.m,.cpp中的实现...文件。#include "A.m"

其他语言如Java会自动扫描B同一目录中的文件.java编译时会查找其他类的声明;C编译器有点“旧”,需要您#include所有必要的标头。

简而言之:主要是历史原因。


答案 2

您不必有头文件。您可以将接口和实现放在同一个文件中,但是将它们分开更容易,也使导入类更加整洁,这意味着其他类不会从.m继承它们不需要的东西(如常量)。


推荐