我想用這個對象工廠:給定一個字符串,創建一個類,並且如果這個類支持一個協議(帶有一個Create()方法),那麼分配這個類並且調用 Create。目標C:給定一個類ID,我可以檢查這個類是否實現了某個協議?或者有一個特定的選擇器?
35
A
回答
15
Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
但是,我可以指出你做了多少次糟糕的Objective-C規則嗎?例如,您不應該在已分配但未初始化的實例上調用方法。 Xcode靜態分析器會給你關於內存泄漏的各種警告。
一個更好的辦法是這樣的:
[[[klass alloc] init] create];
但你似乎暗示你不想調用初始化。
您可以考慮一個類方法:[klass create]
,它將返回一個非擁有的klass
實例。然後你只需在調用它之前檢查[klass respondsToSelector:@selector(create)]
。
253
相關問題
- 1. AS3 - 我可以知道一個類是否實現了一個接口(或者是另一個類的子類)?
- 2. 檢查一個對象是否是一個特定的類,並符合協議
- 3. 指定一個實現協議的類
- 4. 檢查一個類型是否實現協議
- 5. 確定一個類是否實現了一個非常特定的接口
- 6. jQuery - 你可以檢查一個類是否有另一個類?
- 7. 確定一個類的超類是否實現了java中的某個接口
- 8. 一個類別可以在Objective C中實現協議嗎?
- 9. 如何檢查一個類是否定義了一個const(特徵檢測)
- 10. 我可以聲明一個符合Swift協議的特定類的類型嗎?
- 11. 如何檢查記錄是否實現了特定的協議?
- 12. 檢查一個文件是否是C中的特定類型
- 13. PHP:檢查一個變量是否是某個類的實例
- 14. 開發一個項目,這是一個開放標準/協議的實現
- 15. 如何檢查一個類是否在Obj-C中實現了協議中的所有方法?
- 16. 反思參數:id來決定它是否是一個類或協議
- 17. 如何檢查是否一個類實現一個接口
- 18. 如何檢查一個java類是否有特定的方法?
- 19. 檢查$(this)是否有一個父類有一個類或指定的數組ID
- 20. 爲了檢查一個類是否有一個具有特定簽名的方法,是否需要`void_t`?
- 21. 我可以指定一個特定的標籤總是有一個特定的類嗎?
- 22. JSoup是否實現了這個目標?
- 23. 如何在運行時檢查某個類是否實現了某個接口?
- 24. 如何檢查某個特定元素是否具有某個類?
- 25. C#:我可以指定一個類的成員結構是一個繼承接口的實現者嗎?
- 26. 在符合協議的所有類上實現一個類別
- 27. 是否可以重寫某個類型的現有Debug實現?
- 28. 檢查一個類型參數是一個特定的接口
- 29. 有沒有一個庫可以給我一個在另一個類中出現的類的所有實例?
- 30. 我該如何檢查一個類是否覆蓋了一個特定方法,基於類名的字符串?
謝謝。你是對的,Create方法應該是一個類方法。 我認爲這通常是如何設計對象工廠的。 – Jacko
這不是最好的答案。 Chuck更好。 – rafaperez