专栏首页Effective Objective C使用向前声明减少引入其他头文件
原创

使用向前声明减少引入其他头文件

向前声明(Forward declaring)

@class Classname

旨在告诉编译器某个符号存在,解决当没有include该头文件时导致该符号不能被正确解析的问题。

头文件的引用问题

例子:

// EOCCompany.h
#import <Foudation/Foudation.h>

@interface EOCCompany: NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) EOCEmployee *employee;

在上述例子中,如果没有#import <EOCEmployee.h> ,就会导致EOCEmployee符号解析错误。

而如果采用#import <EOCEmployee.h>,则一并引入该文件中所有内容,增加编译时间。

此外,如果在EOCEmployee.h文件中存在如下代码:

- (void) addEmployee:(EOCCompany *)company;
- (void) removeEmployee:(EOCCompany *)company;

则会导致两个头文件相互引用,虽然采用import不会像include一样产生死循环,但是会导致其中一个文件无法被正确编译。

正确引用方法

因此,在实际应用中,应当在头文件中尽可能地不要引入其他头文件,而是采用向前声明@class EOCEmployee的方式告知编译器。

特殊情况

如果某个类需要遵循某个协议的时候,不能使用向前声明:

  • 一则直接引用该协议所在头文件;
  • 二则可以将协议写入单独的头文件,引入该头文件即可;
  • 三则,可以将遵循协议的声明移到.m文件中。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言头文件j解析

    如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。

    小林C语言
  • C语言头文件组织与包含原则

    如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。

    C语言与CPP编程
  • iOS 微信编译速度优化分享

    前言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了。记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-in...

    微信终端开发团队
  • www6663388com请拨18687679362环球国际iOS 微信编译速度优化分享

    岁月真是个养猪场,这几年,人胖了,微信代码也翻了。记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟。如今用公司配的 17 年款 27-inch i...

    用户7106032
  • Windows客户端C/C++编程规范“建议”——文件

    说明:#include <>和#include “”导致编译器在搜索文件时,搜索的路径顺序不同。所以需要正确使用#include,以避免包含错了头文件。

    方亮
  • Q音直播编译优化与二进制集成方案

    ? 一、背景: Q音直播抽离成pod库分别引入到QQ音乐和Fan直播两个独立app中,而对于直播业务来讲,直播SDK通过pod本地引入集成到Demo中进行日...

    QQ音乐技术团队
  • 【笔记】《C++Primer》—— 第一部分:C++基础

    说好的总结就是这个了,基本上就是再回看了下之前的7篇笔记并且重新翻翻书梳理了一下,也在此每小节补上了一开始没写的小标题。这篇写起来还是比较轻松的,基本都是从前面...

    ZifengHuang
  • Web前端中的命名规则

    规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范...

    用户1667431
  • web前端开发规范总结

    Web前端作为开发团队中不可或缺的一部分,需要按照相关规定进行合理编写(一部分不良习惯可能给自己和他人造成不必要的麻烦)。不同公司不同团队具有不同的规范和文档。...

    一墨编程学习
  • web前端开发规范总结

    Web前端作为开发团队中不可或缺的一部分,需要按照相关规定进行合理编写(一部分不良习惯可能给自己和他人造成不必要的麻烦)。不同公司不同团队具有不同的规范和文档。...

    用户7005037
  • C/C++编码规范

    对于变成人员,良好的编程风格是提高程序可靠性和效率非常重要的手段。而编码规范就是对编程风格最好的约束保障。 严格遵守编码规范方便代码的交流和维护,利于提高代...

    Dabelv
  • 高性能网站建设指南-前端性能优化(一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    奋飛
  • 《Effective Objective-C》干货三部曲(二):规范篇

    该三部曲系列是由笔者将《Effective Objective-C 》这本书的52个知识点分为三大类进行了归类整理而成:

    用户2932962
  • 《Effective Objective-C》干货三部曲(二):规范篇

    继上一篇《Effective Objective-C 》干货三部曲(一):概念篇之后,本篇即是三部曲的第二篇:规范篇。本篇归纳讲解的是书中有关Objective...

    展菲
  • 《经济学人》VR新功能:让无人车测试更加安全

    【新智元导读】《经济学人》刊文,介绍英国华威大学研究员开发的一款用于测试自动驾驶汽车的虚拟系统,能够模拟道路场景、引擎声音。研究人员还探索了如何防止系统被远程入...

    新智元
  • JavaScript忍者秘籍

    https://github.com/zhangyue0503/html5js/blob/master/javascriptninja/

    硬核项目经理
  • Google C++编程风格指南(一)之头文件的相关规范

    一个良好的编程规范和风格是一名程序猿成熟的标志。规范的编码可以减少代码冗余,降低出错概率,便于代码管理和代码交流等等,事实上,其作用远不止这些,我们要牢记编码规...

    Dabelv
  • 我的Go语言初体验

    只要了解这些底层的根本问题,你才会有持续的动力深入学习,而不是盲目跟风和三分钟热度。

    phoenix.xiao
  • OpenAI新论文称打败GAN达到SOTA!这个霸气扩散模型是噱头还是干货?

    自从2014年诞生以来,尤其是在人脸生成方面的Deepfake,GAN几乎完全主导了图像生成领域的研究和应用。

    新智元

扫码关注云+社区

领取腾讯云代金券