坚持与一对多关系的循环依赖

时间:2011-05-19 16:38:17

标签: interface protocols circular-dependency

所以我正在构建一个有服务器对象的系统,它会生成Uploader对象。两者都被定义为协议/接口,无论您喜欢哪个术语。 Server对象有一个方法,它生成一个Uploader并返回它,并带有以下签名:

- (id<Uploader>)generateUploader;

Uploader需要包含一个引用回创建它的服务器的引用,因为它需要引用Server来从我的keychain包装器获取密码。因此,它包含一个返回其父服务器的方法:

- (id<VayprServer>)parentServer;

当然,这会在两个协议之间产生循环依赖关系。关于如何解决这个问题的任何想法?

谢谢!
比利

2 个答案:

答案 0 :(得分:1)

要打破依赖关系,就像所有循环依赖关系一样,你必须在.hs中转发声明内容。特别是:

// VapyrServer.h

@protocol Uploader;

@interface Blah : …
…
- (id <Uploader>) generateUploader;
…

// VapyrServer.m

#import "Uploader.h"
…

// Uploader.h

@protocol VapyrServer;

@interface MoreBlah : …
…
- (id <VapyrServer>) parentServer;
…

// Uploader.m

#import "VapyrServer.h"
…

这样,两个.ms将看到以正确的顺序声明的事物。

答案 1 :(得分:0)

这不一定是反模式。

在树形结构(如Windows资源管理器中的资源管理器树)中,树会显示一组节点,但每个节点都有一个对树的引用。