zoukankan      html  css  js  c++  java
  • 在类的头文件中尽量少引入其他头文件

    1、用Objective-C语言编写“类”的标准方式:以类名做文件名,分别创建两个文件,头文件后缀用.h,实现文件后缀用.m。
     
    2、用Objective-C语言编写任何类几乎都需要引入Foundation.h。如果不在该类本身引入这个文件的话,那么就要引入与其超类所属框架相对应的“基本头文件”。例如,使用Xcode创建一个继承UIViewController类的PersonViewController类,在其头文件中引用的不是UIViewController,而是#import <UIKit/UIKit.h>。
     
    3、在头文件中声明的属性或者方法时,如果需要引用其他的类,使用“向前声明”@class该类,而不是使用#import该类。例如,把EOCEmployer.h引入到EOCPerson.h,那么只要引入EOCPerson.h就会一并引入EOCEmployer.h放入所有内容。此过程若持续下去,则要引入许多根本用不到的内容,这当然会增加编译时间。
     
    4、使用“向前声明”还可以避免“循环引用”问题。例如,若要编译EOCEmployer,则编译器必须知道EOCPerson这个类,而要编译EOCPerson,则又必须知道EOCEmployer。如果在各自头文件中引入对方的头文件,则会导致“循环引用”。当解析其中一个头文件时,编译器会发现它引入了另一个头文件,而那个头文件又回过头来引用第一个头文件。使用#import而非#include指令虽然不会导致死循环,但却意味着两个类里有一个无法被正确编译。
     
    5、如果要声明你写的类遵从某个协议(protocol),那么该协议必须有完整定义,且不能使用向前声明。向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法。因此,如果你要声明<EOCDrawableDelegate>则需要引入包含该协议的类#import<EOCDrawable>。因此,只要引入此协议,就必定会引入那个头文件中的全部内容,如此一来,就像之前说的那样,会产生互相依赖问题,而且还会增加编译时间。鉴于此,最好是把协议单独放在一个头文件中。
     
    6、然而有些协议,例如“委托协议”(delegate protocol),就不用单独写一个头文件了。在那种情况下,协议只有与接受协议委托的类放在一起定义才有意义。此时最好能在实现文件中声明此类实现了该委托协议,并把这段实现代码放在分类里。这样的话,只要在实现文件中引入包含委托协议的头文件即可,而不需要将其放在公共头文件里。
     
  • 相关阅读:
    HTML 防盗链 用src引用网上图片显示 403 Forbidden
    JS C# 正则表达式去除html字符中所有的标签(img em标签除外)
    net core 3.1使用ElasticSearch 全文搜索引擎
    VS2019开启调试,测试图片上传的时候,一点到图片上传,直接导致VS调试崩掉,返回 程序“[14764] iisexpress.exe”已退出,返回值为 -1 (0xffffffff)。 是什么原因导致的?
    NET 5 使用IdentityServer4 4.x
    服务器下配置springboot项目开机自启
    分布式技术文档
    win10系统ffmpeg命令初体验
    大数据Hadoop生态圈介绍
    MySQL之Explain详解
  • 原文地址:https://www.cnblogs.com/cchHers/p/6931159.html
Copyright © 2011-2022 走看看