2010-09-07 70 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