2011-05-19 132 views
0

所以我構建了一個系統,其中有一個服務器對象,並生成Uploader對象。兩者都被定義爲協議/接口,無論您選擇哪個術語。服務器對象有其生成上傳器並將其返回,與下面的簽名的方法:卡住了一對多關係的循環依賴關係

- (id<Uploader>)generateUploader;

上傳器需要包含一個返回參考其創建它的服務器,因爲它需要一個參考服務器從我的鑰匙串包裝器中獲取密碼。因此,它包含返回其父服務器的方法:

- (id<VayprServer>)parentServer;

當然,這造成了兩個協議之間的循環依賴。有想法該怎麼解決這個嗎?

謝謝!
比利

回答

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會看到以正確的順序聲明的東西。

+0

爲什麼感謝你,我的好先生!我完全忘記了我可以做到這一點。 – vilhalmer 2011-05-19 19:33:32

0

這不一定是反模式。

在諸如Windows資源管理器中的資源管理器樹之類的樹結構中,樹公開了節點的集合,但每個節點都具有對樹的引用。