Objective-C中的.h和.m文件

15

今天我正在寻找知识。

我正在为工作编写一些代码,经过审查后,我完全忘记了我们为什么要在objective-c的.h和.m文件中执行某些操作。

  1. 我想知道为什么要在 .h 文件中导入文件并声明方法名称?(我知道这与处理有关,但无法记住详细信息)
  2. 为什么有时候在 .m 文件中直接导入文件而不在 .h 文件中进行导入?
  3. 当您在 .h 文件中声明一个方法时,这是因为您使用的类和/或库不能执行所需的功能吗?
  4. 是否曾经有过在 .m 文件中声明不存在于任何库或 .h 文件中的方法的情况?

感谢大家,希望我表达清楚了。


恐怕那些都没有意义。:( - user529758
4
嗯,它的意思很清楚。我现在回答。 - Fogmeister
2个回答

27
  1. 它被用来区分类的公共部分和私有部分。 .m文件是实现文件。这里放置所有逻辑、处理数据以及存储数据的代码等等... .h文件是该类的接口。它就像是自己类的API一样。它告诉其他类如何使用它和如何与之交互。

  2. 当在一个文件中引用一个类时,需要导入它。如果在接口中引用了某些东西(例如属性),则需要在.h文件中导入它。如果仅在实现中引用,则需要在.m文件中导入。

  3. .h文件中声明的任何方法都是为了让其他类知道它们可以运行它。即它们是公共方法。尝试删除一个声明,然后调用该方法。你会收到警告。

  4. 不,这没有意义。除非你正在编写程序并为测试目的而声明它。


根据您对第二个问题的回答,我认为我理解了第一部分。您能否举个例子来解释关于引用实现的第二部分呢? - Jadex1
当我说“在实现中引用它”时,我只是指在.m类中使用它。例如,如果您创建了一个名为MyCustomClass的自定义类,然后在视图控制器中决定使用它。那么您需要在.m文件中导入它。 - Fogmeister

5
  1. 因为.h文件是类的公共接口
  2. 因为将导入放入.m文件可以使其成为私有成员,并将依赖关系排除在.h文件之外(防止过多的依赖导入和潜在的循环依赖)
  3. 你这样做是为了公开声明你提供了那项服务
  4. 如果不存在,你不应该使用它(尽管你可能会声明一些你希望存在的东西,并在实际尝试使用它们之前进行检查)

额外加分项:在您的.h文件中,您应该尽可能少地导入(仅导入超类和任何您公开实现的协议),并对其他所有内容使用@class。这最小化了依赖关系的影响。


谢谢您的解释,这对我很有帮助。因此,在 .h 文件中保留方法可以使它们保持私有。 - Jadex1
@Jadex1 如果我没错的话,应该是 .m 文件是私有的,正如 Fogmeister 所说:“.m 文件是实现文件。它是所有逻辑、数据处理和存储等的地方。” - 0x1ad2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接