需求:有一個Person類里面有一個Dog類的屬性待笑,需要Dog類也引用Person類(防止循環(huán)引用团赁,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
解決:
頭文件循環(huán)引用導(dǎo)致---因為Person類中 improt“Dog.h",當讀到這時就會進入Dog.h睁宰,進入Dog.h后又發(fā)現(xiàn)#import”Person.h",于是又進入Person.h讲衫,如此這般茄猫,陷入了無盡的循環(huán)瘩绒!
修復(fù)方案:
在Dog類中去掉#import“Person.h",打破循環(huán),然后使用@class關(guān)鍵字贬堵,告訴編譯器在Dog.h文件中恃轩,Person*person只是類的聲明,具體這個類有什么信息扁瓢,這里不需要知道详恼。等實現(xiàn)文件中真正需要的時候补君,才會真正查看Person類中的信息引几。
#import <Foundation/Foundation.h>
@class Person;
@interface Dog : NSObject
@property(nonatomic,weak)Person * person;
@end
GoDog!XD