2011-01-11 75 views
29

我想將字符串轉換爲類名稱。想象一下,我有一個字符串,其中包含一個類名稱,例如字符串"MyExampleClass"。現在,我想創建類MyExampleClass的對象。我必須從字符串中獲取類名。我想要做類似下面的事情。 (考慮代碼就像草圖)將字符串(「MyExampleClass」)轉換爲類名稱(MyExampleClass)

NSString *classNameStr = "MyExampleClass"; 
id theClass = [UIClass classFromString:classNameStr]; 
theClass *myObject = [[theClass alloc] init]; 

什麼是正確的方法來做到這一點?

+0

你還沒有閱讀關於反射的java教程嗎? – atk 2011-01-11 05:43:11

回答

76

這裏有你想要的東西:

Class theClass = NSClassFromString(classNameStr); 
id myObject = [[theClass alloc] init]; 

請注意,您不能使用theClass作爲一個類型名稱(即theClass *myObject)。你必須使用id

23

你想NSClassFromString

NSString *classNameStr = @"MyExampleClass"; 
Class theClass = NSClassFromString(classNameStr); 
id myObject = [[theClass alloc] init]; 

您還可以使用objc運行時接口(例如objc_getClass(const char* name)objc_lookUpClass(const char* name))。前者不會加載課程。後者將會。在某些情況下,這種選擇可能是一件好事。

6
id a = [[NSClassFromString(@"MyExampleClass") alloc] init]; 

使用這一個,這會給你你想要的。

0

如果你想動態建立的類,我建議你最好先看看工廠方法設計模式,否則你就會成爲失去跟蹤誰建造什麼和如何。

爲此,您可以編寫一個類,該類接收一個字符串並根據輸入字符串返回一個類。

查看「設計模式:可重用面向對象軟件的元素」一書 Erich Gamma;理查德·赫爾姆;拉爾夫約翰遜;約翰Vlissides。