所以我正在构建一个有服务器对象的系统,它会生成Uploader对象。两者都被定义为协议/接口,无论您喜欢哪个术语。 Server对象有一个方法,它生成一个Uploader并返回它,并带有以下签名:
- (id<Uploader>)generateUploader;
Uploader需要包含一个引用回创建它的服务器的引用,因为它需要引用Server来从我的keychain包装器获取密码。因此,它包含一个返回其父服务器的方法:
- (id<VayprServer>)parentServer;
当然,这会在两个协议之间产生循环依赖关系。关于如何解决这个问题的任何想法?
谢谢!
比利
答案 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资源管理器中的资源管理器树)中,树会显示一组节点,但每个节点都有一个对树的引用。