2011-04-29 50 views
1

我承认,这是问题的一般类型,但我很想在你的意见:为什么将objective-c @interface定义放置在单独的.h文件中?

  • 为什么分隔成.H头文件,然后导入到@interface @protocol和@财产。定义执行文件?

有没有人在那里定义了.m文件中的所有内容?

顺便说一句>它不是我打算不使用.h文件,只是想了解它背后的想法!

回答

6

因为Objective-C依赖于标准的C基础架构,其中每个编译单元(.m)被单独编译,然后所有编译单元都链接在一起。

这意味着Objective-C编译器的静态类型检查阶段只需要.h文件就可以知道已声明的类的特征(例如方法的签名),但仅仅是为了确保所有的东西都被使用这就是为什么你在其他源文件中需要你在头文件中声明的内容。

如果你有A.h/.mB.h/.m它使用A你可以把头文件想象成一个契约:“如果你想使用A,我会在编译阶段结束时链接它的二进制代码,A能够提供在这个头文件中描述,这是你应该知道的唯一的东西“

+0

谢谢@Jack,这有助于我理解编译过程。理论上,编译器能否从#import'ed文件中提取@interface定义? – Damien 2011-04-29 13:48:39

+0

顺便说一句,它不是我打算不使用.h文件,只是试图理解它背后的想法 – Damien 2011-04-29 13:49:23

+0

如果你的意思是一个'.m'那么理论上它可以,但'#import'(和一般# include')指令由预处理程序管理,预处理程序将指令替换为指定文件的内容,但不会为您执行任何类型的肮脏工作。这就是为什么你需要拆分它们。您可以将它们视为前向声明:因为'.m'文件使用的东西不是直接在那里声明,而是同时在另一个单元中编译,所以您需要向代码解释在某处实现的类的特性其他。 – Jack 2011-04-29 13:54:22

相关问题