我有两节课。我们称他们为Dog
和Cat
。
在Dog
我有Cat
的实例,Dog
有一个方法harrassCat
。在harrassCat
内,我调用Cat
方法swipeAtDogsNose:
,该方法使用Dog
的属性来计算其输出。
问题出在头文件中。我将Cat
的头文件导入Dog
并创建一个属性。然后我在harrassCat
中访问此属性。
现在,我有一个NSArray
,其中所有必需的属性都作为swipeAtDogsNose:
中的参数传递。我想直接访问Dog
中swipeAtDogsNose:
的属性,但我无法将Dog
标头导入Cat
标头,因为它会导致循环依赖,并且无法编译。
我在Stack Overflow上读到,当你有循环依赖时,你可以使用@class
来访问另一个类。如何使用Dog
导入@class
,以便Cat.h中的方法声明如下所示:
- (BOOL)swipeAtDogsNose:(Dog *)theDog;
答案 0 :(得分:2)
您需要的是forward declaration,并通过在头文件中另一个类的接口之前添加声明来声明它。
@class ClassB;
@interface ClassA
...
请注意,您不需要这样做,只要任何方法签名需要一个未定义且无法在头文件中导入的类型,如果您有@property
的类型,则需要它或者如果您有该类型的班级成员。
基本上:如果类型名称出现在标题中,那么您需要转发声明它(或#import
标题),否则您只能在#import
文件中.m
。您不必在其他标头内导入标头,在实施文件中导入就足够了。
答案 1 :(得分:0)
类别:
@class ClassB;
@interface classA
@property (strong, nonatomic) classB* propertyThatUseClassB
@end
类别:
@class ClassA;
@interface classB
@property (strong, nonatomic) classA* propertyThatUseClassA
@end