iOS头文件循环引用

需求:有一个Person类里面有一个Dog类的属性,需要Dog类也引用Person类(防止循环引用,Dog类里面使用weak引用Person类)
于是代码如下:

//Person类
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
@property(nonatomic,strong)Dog * dog;
@end

//Dog类
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Dog : NSObject
@property(nonatomic,weak)Person * person;
@end

但是,Person类报错:dog类找不到

截屏2020-02-26上午11.32.15.png

解决:

头文件循环引用导致---因为Person类中 improt“Dog.h",当读到这时就会进入Dog.h,进入Dog.h后又发现#import”Person.h",于是又进入Person.h,如此这般,陷入了无尽的循环!

修复方案:

在Dog类中去掉#import“Person.h",打破循环,然后使用@class关键字,告诉编译器在Dog.h文件中,Person*person只是类的声明,具体这个类有什么信息,这里不需要知道。等实现文件中真正需要的时候,才会真正查看Person类中的信息。

#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
@property(nonatomic,weak)Person * person;
@end

GoDog!XD

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容