循环依赖? “期望的说明者 - 限定符 - 列表”

时间:2011-07-22 18:16:12

标签: iphone objective-c

我得到了预期的说明符 - 限定符 - 列表错误,在搜索时,有些人描述了循环依赖。我不确定这意味着什么,如果可能的话可以使用解释。基本上我有一个在.m文件中使用Bar类型的类Foo。我不需要酒吧的伊娃。我以为我可以#import" Bar.h"在Foo.h文件中,因为Foo.m导入了Foo.h文件,但那是我收到错误的地方。在这种情况下,为什么要将它放在.m文件中,而不仅仅包含.h文件中的所有内容以使文件顶部的内容更加干净?对不起,如果这是一个愚蠢的问题。感谢。

1 个答案:

答案 0 :(得分:3)

循环依赖正是它听起来的样子。你肯定有一个。

这样看:

Foo需要Bar,但Bar需要Foo。

因此,您实例化Foo,它会获得对Bar的引用。那么这实例化了Bar,所以这得到了对Foo的引用。这再次实例化了Foo,因此它获得了对Bar的引用。 Welp,这个Bar需要一个Foo,所以它可以引用Foo。

这种情况一次又一次地发生,基本上是一个无限循环。为了通过循环依赖,你告诉Foo关于Bar

//Foo.h
@class Bar

@interface Foo: NSObject {

}

@end

然后,在Foo.m中导入Bar的标题

//Foo.m
#import "Foo.h"
#import "Bar.h"

@implementation Foo
-(void)barTime {
     Bar bar = [[[Bar alloc] init] autorelease];
     [bar getDrunk];
}

@end

这打破了链条。 Foo只知道Bar,所以只有Bar得到了Foo。