Objective-C|Objective-C 基础教程第六章,源文件组织


目录

  • Object-C 基础教程第六章,源文件组织
    • 0x00:前言
    • 0x01:Xcode创建OC类
    • 0x02:Xcode群组
    • 0x03 Xcode跨文件依赖关系
      • @class关键字
      • 导入和继承
    • 小结

Object-C 基础教程第六章,源文件组织 0x00:前言 到目前为止,我们讨论过的所有项目都是把源代码统统放入到了main.m文件中。这样随着项目越来越大,文件内容会越来越多,到后面我们的项目就不太好管理,因为所有东西都写在一起搜索起来也比较费劲。
现在我们需要学习Xcode用类文件的方式来区分.h .m将类,单独分类成文件的形式。
0x01:Xcode创建OC类 因为书中的例子已经非常老了不再适用,我这里用最新的Xcode13来演示之前的Car程序。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

选择CocoClass
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

输入类名,并且选择继承自NSObject
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

接着我们就创建好了我们的Engine类,然后我们把main.m中的Engine类代码给移植过去。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

接着你们可以重复如上的操作,将其他类也创建成类文件,并且将代码移植过去最后如下图。
这样代码结构就清晰多了,而且后续要添加修改代码,就在指定的类文件中修改即可。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

0x02:Xcode群组 Xcode群组有两种,一种是会创建文件夹,将你的文件移动到文件夹里。还有一种是不会创建文件夹,只是在Xcode中看起来比较结构清晰 理论上的群组。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

并没有创建文件夹。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

这样文件管理,代码结构上看着就又更加舒服 清晰了。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

0x03 Xcode跨文件依赖关系 依赖关系(dependency)是两个实体之间的一种关系。
在编程和开发过程中,经常会出现关于依赖关系的问题,比如Slant6类因继承了Engine类,那么当Engine类发生了变化,比如添加了新的实例变量,那么Slant6就依赖于Engine类,并且需要才行编译Slant6来适应这个变化,那么这里就有一个问题,假如我们有超级多的.m文件用了这个Engine头文件,那么岂不是得花超长时间来编译?
@class关键字
为了解决如上的问题,好在Objective-C引入了关键字@class用来告诉编译器,这是一个类,所以我只会通过指针来引用他,这样编译器就不需要知道.h类文件中的所有成员和方法了,节省了不少时间。ps:那么请猜测或者动手实践一下,加入我们逆向分析的时候还能导出对应的类头文件吗?或者对应头文件中他还会显示类型吗?
#import @class Tire; //修改成@class方式 引入类指针。 @class Engine; //#import "Engine.h" //将这里注释了 //#import "Tire.h" NS_ASSUME_NONNULL_BEGIN /* 汽车 */ @interface Car : NSObject { Engine *engine; Tire *tires[4]; } -(Engine *)engine; -(void) setEngine:(Engine *) newEngine; -(Tire*) tireAtIndex:(int) index; -(void) setTire:(Tire*) tire atIndex:(int) index; -(void) print; @endNS_ASSUME_NONNULL_END

神奇,我们修改后还是可以编译,使得程序正常运行。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

说明:@class创建了一个前向引用。这是在告诉编译器:"相信我。以后你自然会知道这个类到底是什么,但是现在,你知道这些足矣。"
导入和继承
当我们想在子类里面也用上面这种方式就不行了,因为被继承的类他需要确切的知道父类中的详细数据,比如方法比如属性,这样你才能继承他,这样你才能重写他的方法。
Objective-C|Objective-C 基础教程第六章,源文件组织
文章图片

小结 在本章中,我们学习了使用多个文件来组织我们的源代码的基本技巧。这样使得我们看代码更加轻松,而且方便管理。
【Objective-C|Objective-C 基础教程第六章,源文件组织】我们还学习了@class关键字的依赖关系,使得我们在编译文件时,可以让其时间变短,这得益于@class这关键字。

    推荐阅读