我正在开发一个iPhone应用程序,我对Objective-C以及class.h和class.m结构都不熟悉。
现在,我有两个类都需要拥有另一个类型的变量。但这似乎是不可能的。
如果在class1.m(或class2.m)中我包含class1.h,然后是class2.h,我不能在class1.h中声明class2变量,如果我包含class2.h然后是class1.h,我不能在class2.h中声明class1变量。
希望你有我的想法,因为这让我疯了。这样做真的不可能吗?
感谢。
答案 0 :(得分:20)
您可以使用@class
关键字在头文件中转发声明一个类。这使您可以使用类名来定义实例变量,而无需#import
头文件。
<强> Class1.h 强>
@class Class2;
@interface Class1
{
Class2 * class2_instance;
}
...
@end
<强> Class2.h 强>
@class Class1;
@interface Class2
{
Class1 * class1_instance;
}
...
@end
请注意,您的.m文件中仍需要#import
相应的头文件
答案 1 :(得分:3)
循环依赖通常表示设计问题。可能一个或两个类都有太多的责任。可以从循环依赖中出现的重构是将相互依赖的功能移动到两个原始类都消耗的自己的类中。
您能描述每个班级要求的功能吗?