2011-11-14 34 views
0

我有一个全局字典,其中包含Class对象和NSString键。我Property类的每个自定义子类可以使用在init方法中确定类

+ (void)registerPropertyClass:(Class)pclass forNamePrefix:(NSString *)namePrefix 

一个Propertynamevalue初始化的Property超注册自己。我现在要做的是根据前缀name(如果注册的类匹配)从init方法返回不同的类。

会是这样的事情是正确的吗?

- (id)initWithName:(NSString *)name value:(NSString *)value 
    id instance = self; 

    NSArray *registeredPrefixes = [kCKPropertyClasses allKeys]; 
    for (NSString *prefix in registeredPrefixes) { 
    if ([name rangeOfString:prefix].location == 0) { 
     instance = [[kCKPropertyClasses objectForKey:prefix] alloc]; 
     break; 
    } 
    } 

    self = [instance init]; 
    if (self) { 
    self.name = name; 
    self.value = value; 
    } 
    return self; 
} 

更新:忘了提,这个项目使用ARC(所以没有保留/释放)

+0

我建议改变循环只获取类,并将'alloc'移动到与'init'相同的语句。将'alloc'和'init'配对在一起总是最好的。而且由于你使用的是ARC,你可能想用'new'替换'alloc'和'init'对。最后,获得'allKeys'不是必需的;你可以直接在字典上迭代,并且它会产生它的键。 –

回答

1

无需编译它,那会工作,但手动保留释放下的泄漏。在重新分配self = [instance init];之前您需要releaseself

用ARC,应该没问题。

+0

更新了我的问题,忘记提及我使用ARC。 –

相关问题