Unknown type name `xxxxxxx`
使用Objective-C也有好一阵子,突然在Build
时发生明明该名称在Class里面,Build时却说它不认识这个名称:
原来我也掉进一般人也会发生的问题,那就是循环引用
,这名词虽然在学Objective-C并不陌生,也理解问题在哪,但发生时却有可能没有意识到这问题,这次纪录一下现象,避免下次再度发生。
循环引用
顾名思意就是Class A、Class B中都有互相使用Class,意指Class A中有使用到Class B,所以会在Class A中import Class B.h
,相对的Class B也是,这样会造成所谓的循环引用,在记忆体管理中可能会造成无法它一些变数、Class释放(Release)产生记忆体泄漏(memory leak)问题,Build时编译器会发出警告。
如何解决
以下为循环引用例子:
//-----------start----------- #import "Cat.h" @interface Dog : NSObject @property (nonatomic, strong) Cat *cat; @end //------------end------------
//-----------start----------- #import "Dog.h" @interface Cat : NSObject @property (nonatomic, strong)Dog *dog; @end //------------end------------
这问题要解决它就是告知编译器使用的Class已经有引用,让编译器编译无需理会这问题,所以在循环引用的Class中加上引用Class的注记@Class Name
,所以正确的为:
//-----------start----------- @Class Cat @interface Dog : NSObject @property (nonatomic, strong) Cat *cat; @end //------------end------------
//-----------start----------- @Class Dog @interface Cat : NSObject @property (nonatomic, strong)Dog *dog; @end //------------end------------