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

虚幻大学 虚幻 494℃ 0评论

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
目录* Object-C 基础教程第六章,源文件组织

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

0x00:前言

到目前为止,我们讨论过的所有项目都是把源代码统统放入到了main.m文件中。这样随着项目越来越大,文件内容会越来越多,到后面我们的项目就不太好管理,因为所有东西都写在一起搜索起来也比较费劲。

现在我们需要学习Xcode用类文件的方式来区分.h .m将类,单独分类成文件的形式。

0x01:Xcode创建OC类

因为书中的例子已经非常老了不再适用,我这里用最新的Xcode13来演示之前的Car程序。

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

选择CocoClass

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

输入类名,并且选择继承自NSObject

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

接着我们就创建好了我们的Engine类,然后我们把main.m中的Engine类代码给移植过去。

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

接着你们可以重复如上的操作,将其他类也创建成类文件,并且将代码移植过去最后如下图。

这样代码结构就清晰多了,而且后续要添加修改代码,就在指定的类文件中修改即可。

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

0x02:Xcode群组

Xcode群组有两种,一种是会创建文件夹,将你的文件移动到文件夹里。还有一种是不会创建文件夹,只是在Xcode中看起来比较结构清晰 理论上的群组。

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

并没有创建文件夹。

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

这样文件管理,代码结构上看着就又更加舒服 清晰了。

1378f46b60d603f7c84cc498d57a1441 - 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;
@end

NS\_ASSUME\_NONNULL\_END

神奇,我们修改后还是可以编译,使得程序正常运行。

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

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

导入和继承

当我们想在子类里面也用上面这种方式就不行了,因为被继承的类他需要确切的知道父类中的详细数据,比如方法比如属性,这样你才能继承他,这样你才能重写他的方法。

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

小结

在本章中,我们学习了使用多个文件来组织我们的源代码的基本技巧。这样使得我们看代码更加轻松,而且方便管理。

我们还学习了@class关键字的依赖关系,使得我们在编译文件时,可以让其时间变短,这得益于@class这关键字。

转载请注明:虚坏叔叔 » Objective-C 基础教程第六章,源文件组织

喜欢 (0)

您必须 登录 才能发表评论!