相互依存的阶级

时间:2011-05-16 14:19:49

标签: objective-c xcode

说A类依赖于B类,反之亦然。

很明显在a.h中我会把#import“b.h”放在“b.h”中我会输入“a.h”

之后

我们应该

宣布@class A

b.h中的

和a.h中的@class B

我们应该同时使用@class吗?

为什么?

我推断如果我只做一次,比如在a.h中包含@class B,假设a.h还包含#import“b.h”那么a.h类已经知道了b.h

然而,似乎我必须在xcode中做到这一点,我想知道为什么。

2 个答案:

答案 0 :(得分:1)

在每个类的头文件中使用前向声明(即@class Foo)并没有错。如果您需要的是每个类引用另一个类,您可以这样做。前向声明只是告诉编译器"这个名称引用一个类,并且该类的实际声明将在稍后出现。"

正如你所说,你也可以在A.h中使用B的前向声明,然后在B.h中导入A.h.我不认为这样做有任何实际好处,除非A.h中还有其他东西需要在B.h中引用。

  

但似乎我必须这样做   在xcode和我想知道为什么。

如果您的意思是在B.h中导入A.h而不是使用A的前向声明时出现错误,请发布错误。我不认为应该有问题。 (无论如何,问题将是编译器问题或Objective-C问题,而不是Xcode问题.Xcode只是IDE。)

答案 1 :(得分:0)

你应该重新考虑你的设计,不需要像这样的循环依赖。

您可能希望在ClassA中声明ClassADelegateClassA.h。接下来在ClassB中声明ClassB.h,然后从那里导入ClassA.h,让ClassB符合ClassADelegate协议以解决循环依赖关系。

通过这种方式,您可以获得明确的所有权关系,以及将来更容易维护和扩展的代码。