我正在處理對象工廠以跟蹤對象的一個小集合。這些對象可以是不同的類型,但它們都會響應createInstance
和reset
。這些對象不能從公共基類派生,因爲它們中的一些必須從內置的可可類派生,如NSView
和NSWindowController
。如何將類名作爲參數傳遞給可可中的對象工廠?
我希望能夠通過傳遞所需的類名來我廠創建任何合適的對象的實例如下:
myClass * variable = [factory makeObjectOfClass:myClass];
的makeObjectOfClass:
方法會是這個樣子:
- (id)makeObjectOfClass:(CLASSNAME)className
{
assert([className instancesRespondToSelector:@selector(reset)]);
id newInstance = [className createInstance];
[managedObjects addObject:newInstance];
return newInstance;
}
有沒有辦法將類名傳遞給方法,正如我上面makeObjectOfClass:
的(CLASSNAME)className
參數所做的那樣?
爲了完整起見,這裏是我爲什麼要管理所有對象的原因。我希望能夠通過撥打[factory reset];
來一次性重置一組完整的對象。
- (void)reset
{
[managedObjects makeObjectsPerformSelector:@selector(reset)];
}
我之間邁克爾·蔡的和馬特·加拉格爾的答案撕裂。我提高了兩個,因爲都提到了'Class'的用法,這正是我所期待的。最後,我選擇了馬特的答案,因爲它強調了「類」在ClassFromString,這是第一個編輯之前提到使用「類」的。 – 2008-11-24 22:31:32
@Ned Batchelder:謝謝你改變標籤。出於某種原因,「的ObjectiveC」顯示更多的項目(約200),比當我添加標籤的問題出現標籤的下拉列表「的ObjectiveC」,但我現在看到「的ObjectiveC」已經重定向以「Objective-C的」 – 2008-11-24 23:08:48
@eJames:你的問題顯示-reset發送到實例,而不是類對象,所以我認爲[ACLASS respondsToSelector:@selector(復位)]在馬特加拉格爾的答案不正確。 – 2008-11-25 00:51:33