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


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

    0x00:前言

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

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

    0x01:Xcode创建OC类

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

    image-20220307222713606

    选择CocoClass

    image-20220307222751409

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

    image-20220307222826043

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

    image-20220307222923931

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

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

    image-20220307223758678

    0x02:Xcode群组

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

    image-20220307225310995

    并没有创建文件夹。

    image-20220307225326138

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

    image-20220307225414737

    0x03 Xcode跨文件依赖关系

    依赖关系(dependency)是两个实体之间的一种关系。

    在编程和开发过程中,经常会出现关于依赖关系的问题,比如Slant6类因继承了Engine类,那么当Engine类发生了变化,比如添加了新的实例变量,那么Slant6就依赖于Engine类,并且需要才行编译Slant6来适应这个变化,那么这里就有一个问题,假如我们有超级多的.m文件用了这个Engine头文件,那么岂不是得花超长时间来编译?

    @class关键字

    为了解决如上的问题,好在Objective-C引入了关键字@class用来告诉编译器,这是一个类,所以我只会通过指针来引用他,这样编译器就不需要知道.h类文件中的所有成员和方法了,节省了不少时间。ps:那么请猜测或者动手实践一下,加入我们逆向分析的时候还能导出对应的类头文件吗?或者对应头文件中他还会显示类型吗?

    #import <Foundation/Foundation.h>
    @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
    
    

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

    image-20220307231130654

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

    导入和继承

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

    image-20220307231605266

    小结

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

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


    __EOF__

  • 本文作者: VxerLee
  • 本文链接: https://www.cnblogs.com/VxerLee/p/15978631.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    Linux安装RabbitMQ
    灵活使用ssh、dsh和pssh高效管理大量计算机
    LeetCode-94. Binary Tree Inorder Traversal [C++][Java]
    pk答题小程序怎么做?功能有哪些?为您揭秘!
    固定开发板的ifconfig的IP地址
    【无标题】
    Cython 笔记 (Python/Jython)
    C++多态与虚拟:C++编译器对函数名的改编(Name Mangling)
    YUV采样格式
    Lingo保姆级安装教程及新手快速入门指南
  • 原文地址:https://www.cnblogs.com/VxerLee/p/15978631.html