2010-05-11 98 views
0
@interface ClassB <ClassADelegate> : ClassA 

id <ClassBDelegate> delegate; 

@end 

如代碼所示,ClassB的子類來處理A類的形成協議。但是,變量「delegate」將被複制。 (ClassA也有「委託」)(可可)我可以同時進行子類和委託嗎?

事實上,它可以在沒有子類化的情況下完成,但似乎代碼很繁瑣,即使用ClassA的變量/函數,我需要編寫[[ClassB classA] doSomething]而不是[classB doSomething],其中doSomething:是ClassA的一個函數。

有沒有什麼清潔的方法可以做到這一點?

回答

2

查看您發佈的示例,ClassB符合ClassADelegate協議和ClassB,然後具有符合ClassBDelegate的委託對象。如果ClassB符合ClassADelegate並且也是ClassA子類,那麼我很好奇爲什麼ClassADelegate方法不僅僅是ClassA的一部分。

因此,我會重新考慮這個設置的體系結構,並嘗試保持模型對象和委託單獨存在,這是委託模式的重點。如果這對你的應用程序沒有意義,關於你的子類化的更多具體信息將會有所幫助。

在今天做一些工作時,我發現Apple確實使用了委託和子類化,但絕對不是您提出的方式。看看NSTextField和NSControl類。 NSTextField當然是NSControl的子類,並有它自己的委託方法,但NSControl也有一組委託方法。但是NSTextField不符合NSControl的委託協議(事實上它並沒有被指定爲協議)。

相關問題