對於使用iOS SDK的一些軟件設計決策,我有一個非常簡單的問題。UIView/CALayer的通用類/協議 - 軟件設計問題
假設我有一個類管理我的應用程序中的視圖對象的表示(UIManager
)。該類允許外部控制器類向其添加視圖對象。視圖對象可以有兩種:CALayer
和UIView
子類。
我的問題是哪個接口更適合這樣的UIManager
類。 例如:
@interface UIManager : UIView {}
// 1)
- (void)addGenericViewObject:(id)genericViewObject;
// 2)
- (void)addUIViewObject:(UIView*)uiViewObject;
- (void)addCALayerObject:(CALayer*)caLayerObject;
// 3)
- (void)addMyProtocolTypeViewObject(id<MyProtocolType>)myProtocolTypeViewObject;
@end
1)id
類型太普通?
2)每種類型都有不同的方法簽名會導致代碼重複?
3)有沒有辦法通過<MyProtocolType>
來代表UIView
和CALayer
類?
或者更一般地說,有處理這些不同對象的類可以互換不好嗎?
的UIManager
的實施將是這樣的:
@implementation UIManager
// 1)
- (void)addGenericViewObject:(id)genericViewObject {
if ([genericViewObject isKindOfClass:[UIView class]]) {
[_uiViewsContainer addSubview:(UIView*)genericViewObject];
} else if ([genericViewObject isKindOfClass:[CALayer class]]) {
[_caLayersContainer addSublayer:(CALayer*)genericViewObject];
}
}
@end
類型檢查總是不好的,也許有<MyProtocolType>
但會解決的情況下,怎麼可能我代表協議雙方UIView
和CALayer
類?這兩個類只符合<NSObject>
。
在此先感謝
奈斯利提出的問題:) – xyz 2011-03-03 16:02:03