【iOS】两个ViewController页面间的头文件互相引用

  • 当我写了两个页面:AviewControllerBviewController,并且我想在AviewController页面中使用到BviewController,在BviewController页面中使用到AviewController
  • 此时我需要在AviewController.h中导入BviewController.h的头文件,在BviewController.h中导入AviewController.h的头文件,如下
  1. BViewController.h导入AViewController.h:
#import "ViewController.h"
#import "BViewController.h"

NS_ASSUME_NONNULL_BEGIN

@interface AViewController : ViewController

@property (nonatomic, strong) BViewController* bViewController;

@end

  1. AViewController.h导入BViewController.h:
#import "ViewController.h"
#import "AViewController.h"

NS_ASSUME_NONNULL_BEGIN

@interface BViewController : ViewController

@property (nonatomic, strong) AViewController* aViewController;

@end

此时会报错!!!

请添加图片描述

原因: 交叉编译,两个类的头文件相互引用是会报错误的,因为.h文件他是接口,在预编译的时候就会报错的。

如何修改? 使用@class

  • 就是把原本头文件导入的代码#import "BViewController.h"改为@class BViewController;即可
#import "ViewController.h"
@class BViewController;

NS_ASSUME_NONNULL_BEGIN

@interface AViewController : ViewController
@property (nonatomic, strong) BViewController* bViewController;

@end

总结如下:

  • OC中两个类 A B,在 A 和 B的.m文件中相互#import对方的头文件没有问题。
  • 但是在 A B的.h文件中相互引用对方的头文件#import,编译出错。
  • 但是当A或者B是需要继承父类的和需要实现代理接口的时候,这种情况下需要在.h文件中引用对方的头文件的时候,如何避免编译不通过呢?采用在将其中一个类的#import,改为@class,并将这个#import放到这个类的.m文件中去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值