實施例:我該如何動態創建一個類的實例?
我有10個視圖控制器,它們都分配並以同樣的方式初始化:
UIViewController *controller = [[MyViewController alloc] initWithNib];
(注意-initWithNib是UIViewController子類的一個自定義的方法)
下一個視圖控制器類是OtherViewController,依此類推。我想在我需要的時候懶洋洋地加載視圖控制器。但要做到這一點,我需要有一些「數組」,它會給我一個給定索引的相應類,以便我可以初始化它。
我最終創建了一個帶有大開關語句的方法,它將爲每個視圖控制器分別執行那些令人討厭的分配和初始化。我對此不滿意。如果我可以將適當的類分配給一個變量,那麼會更好,然後在switch語句的末尾,只需從變量中分配並初始化該類。
有沒有辦法做到這一點?
編輯:我發現了一個功能
id class_createInstance(Class cls, size_t extraBytes)
,每類似乎有一個屬性「類」。但是我不能將它分配給一個實例變量。這是行不通的:
Class cls = [UIImage class];
cls *image = [cls imageNamed:@"avatar.png"];
第一行編譯。但第二個提供了一個錯誤:「圖像未聲明」。
看起來像一個確切的副本http://stackoverflow.com/questions/381793 – smorgan 2009-05-26 20:30:31
我編輯了我的答案,包括一個基本的工廠模式。你想這樣做:id image = [cls imageNamed:@「avatar.png」]。但是,最好在這裏使用通用的基本類型(即UIImage * image = ...),因爲問題的第一部分表明情況就是這樣。 – Jason 2009-05-26 20:51:49