objective-c笔记:源文件组织

头文件.h

主要存放接口部分的代码:类的@interface指令,公共struct定义,enum常量,#defines和extern全局变量。

头文件名与类名相同。

 

所有的实现内容都被放在与类名同名的.m文件中。这些实现内容包括类的@implementation指令,全局变量的定义,私有struct等。

 

xcode中有一个与项目同名的群组,文件都放在群组内的文件夹中,这些文件夹能够帮你组织项目的源文件。在设置群组时,xcode并不会在硬盘上移动文件或者创建目录。群组关系仅仅是由xcode负责管理的一项奇妙的功能。当然,如果你愿意的话,可以设置群组指向文件系统中得某个特定目录,xcode会帮你将新建的文件放入该目录中。

 

#import,带尖括号的语句用于导入系统头文件(只读),带引号的语句则说明导入的是项目本地的头文件(参与项目的人可以编辑它)。

#import非常智能,不会重复导入已经导入的文件。

 

导入头文件使得头文件和源文件之间建立了一种紧密的依赖关系。如果头文件有任何变化,那么所有依赖它的文件都得重新编译。由于依赖关系是传递的,头文件之间也可以互相依赖,所以重新编译的问题会更加严重。

 

Objective-C引入关键字@class来告诉编译器:这是一个类,所以我只会通过指针来引用它。这样编译器就放心了:它不必知道关于这个类的更多信息,只要了解它是通过指针来引用的即可。

@class创建了一个前向引用,它告诉编译器:相信我,以后你自然会知道这个类到底是什么,现在,你知道这些就够了。

@class可以解决循环依赖关系。即,A类使用B类,B类也使用A类。通过@class,这两个类就可以互相引用了。

 

如果类是通过继承而不是指针指向其他类,那么就不能使用@class,因为编译器需要先知道所有关于超累的信息才能成功地为其子类编译@interface部分