2010-09-07 63 views
7

我想知道如何在目標c中創建指定的Class的對象。運行時文檔中是否存在某種方法?如果是這樣,它是什麼?我想能夠做到像下面這樣:Objective C按類創建對象

NSDictionary *types; 

-(id<AProtocol>) createInstance:(NSString *) name 
{ 
    if ((Class cls = [types objectForKey:name]) != nil) 
    { 
     return new Instance of cls; 
    } 
    else 
    { 
     [NSException raise:@"class not found" format:@"The specified class (%@) was not found.", name]; 
    } 
} 

請注意,名稱不是類的名字,但它的縮寫,我不能做什麼是Create object from NSString of class name in Objective-C表示。

回答

18

一個簡單的[[cls alloc] init]將做的伎倆。

+0

嗯....尷尬? – abbood 2015-04-12 07:02:41

3

由於cobbal已經提到[[cls alloc] init]是慣例。 alloc是一個在NSObject中定義的靜態類方法,它分配內存,init是實例構造函數。許多類提供了方便的構造函數,可以一步完成這些操作。一個例子是:

NSString* str = [NSString stringWithString:@"Blah..."]; 

NSString*。你在這裏基本上用C來指向對象!

此外,不要忘記釋放使用alloc與相應的[instance release]分配的內存。您不需要釋放使用便利構造函數創建的內存,因爲它是爲您自動發佈的。當你回到你的全新CLS的情況下,你應該把它添加到自動釋放池,這樣你就不會泄漏內存:

return [[[cls alloc] init] autorelease]; 

希望這有助於。

+0

+1關於autorelease的好處。 – 2010-09-07 19:13:17