這可能是Java編碼器報告的常見Objective-C問題,但我不知道該怎麼稱呼它或如何搜索答案。比方說,我有一個類和延伸它的另一個類:覆蓋Objective-C中的繼承類型
AbstractModel
@interface AbstractModel {
}
ModelImpl
@interface ModelImpl : AbstractModel {
}
分開這些,我還有兩節課,再一個延伸另一種:
ControllerA
@interface ControllerA {
AbstractModel *foo;
}
@property (nonatomic, retain) AbstractModel *foo;
ControllerB
@interface ControllerB : ControllerA {
}
我希望能夠說foo
在ControllerA可以包含AbstractModel或其任何亞型。但是,如果我嘗試在其中存儲AbstractModel以外的任何內容,編譯器會給我一個警告。 (當然,我明白,類不能真正在ObjC是抽象的,但饒了我吧。)
我也想能夠在特定的子類,以「鎖定」的foo
屬性。我想說的是,ControllerB中的foo
例如只能包含ModelImpl4。這可能嗎?
解決這類問題的傳統Objective-C最佳實踐是什麼?以這種方式使用繼承 - 或者爲了實現這個目標 - 在Objective-C中不是一個好主意?
看看UITableView如何處理委託屬性的例子。在這種情況下,它是一個協議,但它會和一個類一樣好。 – drawnonward 2010-06-22 18:35:20