使用方法之间的循环依赖进行编译

时间:2014-01-17 20:57:17

标签: objective-c circular-dependency

我有两节课。我们称他们为DogCat

Dog我有Cat实例Dog有一个方法harrassCat。在harrassCat内,我调用Cat方法swipeAtDogsNose:,该方法使用Dog的属性来计算其输出。

问题出在头文件中。我将Cat的头文件导入Dog并创建一个属性。然后我在harrassCat中访问此属性。

现在,我有一个NSArray,其中所有必需的属性都作为swipeAtDogsNose:中的参数传递。我想直接访问DogswipeAtDogsNose:的属性,但我无法将Dog标头导入Cat标头,因为它会导致循环依赖,并且无法编译。

我在Stack Overflow上读到,当你有循环依赖时,你可以使用@class来访问另一个类。如何使用Dog导入@class,以便Cat.h中的方法声明如下所示:

- (BOOL)swipeAtDogsNose:(Dog *)theDog;

2 个答案:

答案 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