2012-07-10 47 views
0

在Objective-C中有一種方法將對象/類存儲在要傳遞到其他位置的alloc/init的變量中嗎?在變量中存儲對象類型,然後初始化

例如:

UIViewController = foo 
foo *bar = [[foo alloc] init] 

我試圖建立一個系統,以在基於當前視圖控制器上的單獨的類動態創建導航按鈕。我可以將'self'傳遞給該方法,但是結果變量不允許我分配/ init。我總是可以直接導入.h文件,但理想情況下,我希望儘可能簡單地重用代碼。也許我正在以這種錯誤的方式去做?

回答

2

不知道理解你的問題,但如果你想創建同一類的其他實例的新實例,你可以做這樣的事情:

id foo; // an actual instance of any class 

id bar = [[[foo class] alloc] init]; // another instance 

如果foo的未聲明爲id,甚至可以使用快捷方式:[[foo.class alloc] init]或更短:[foo.class new]

您也可以使用類對象:

id foo; 
Class fooClass = [foo class]; 

id bar = [[fooClass alloc] init]; 

或者類名:

id foo; 
NSString* fooClassName = NSStringFromClass([foo class]); 

id bar = [[NSClassFromString(fooClassName) alloc] init]; 
+0

這就是我正在尋找的,查克也有類似的迴應,謝謝! – 2012-07-12 18:27:16

1

假設你存儲的className你想創建爲NSString

你可以試試: id bar = [[NSClassFromString(foo) alloc] init]

1

是的,只需製作Class類型的變量即可。一個名爲類分配給它,你可以做這樣的:

Class foo = [UIViewController class]; 

或者類名是一個動態選擇的字符串(嘿,它發生),你會做這樣的:

NSString *className = @"UIViewController"; 
Class foo = NSClassFromString(className);