2011-11-14 33 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。 –

相關問題