ObjectC----#import和#include的区别以及#import死循环的解决方法

本文介绍了Objective-C中头文件的正确导入方式,探讨了#import与@class的区别及使用场景,特别是如何利用@class避免循环导入的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. #import导入头文件,即:导入头文件中的内容到当前类

2. #import “”导⼊自定义类,#import <>导入类库中的头文件。

3.功能类似C语言中的#include,但是可以避免头文件被重复导 入。(也即可以自动避免)

4. 容易出现循环导入头文件问题。


针对上面4的循环导入头文件而出现的死循环,OC中用@class + 类来解决

下面通过一个实例来说明:

分别定义两个类A和B,A中调用B,B中调用A

A.h中内容:

#import <Foundation/Foundation.h>
#import "B.h"
@interface A : NSObject
{
B * _b;
}
@end

=================================

A.m中的内容:

#import "A.h"

@implementation A

@end
=================================

B.h中内容:

#import <Foundation/Foundation.h>

//#import "A.h"

@class A;//不会执行导入,只是声明了会用到A类,然后用到A类时会去A类中寻找

// #import#include相比,#import可以避免重复导入

// #import 可能会造成循环编译,@class可以解决这个问题,@class A:只是将A声明成一个类

// 编译器不会导入A的内容


// 在使用@class的时候,一定要在.m中引入对应的头文件,例如:@class A;要在对应的.m文件

// 中写:#import “A.h”

@interface B : NSObject

{

    A * _a;

}


@end

==================================
B.m中内容:

#import "B.h"

#import"A.h"     //这里重点:这是在.m中导入的类,而死循环是因为都是在.h中导入,造成编译时

                  //的死循环

@implementation


@end


==================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值