需求:有一个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类找不到
解决:
头文件循环引用导致---因为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