首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用向前声明减少引入其他头文件

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

原创
作者头像
用户7257200
修改2020-04-29 14:31:05
8870
修改2020-04-29 14:31:05
举报

向前声明(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文件中。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 向前声明(Forward declaring)
    • 头文件的引用问题
      • 正确引用方法
        • 特殊情况
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档