У меня есть глобальный словарь с Class
объектами и NSString
ключами. Каждый пользовательский подкласс моего Property
класса может зарегистрироваться в суперклассе Property
, используя
+ (void)registerPropertyClass:(Class)pclass forNamePrefix:(NSString *)namePrefix
A Property
инициализируется с name
и value
. Теперь я хочу вернуть класс, отличный от метода init, на основе префикса name
(если зарегистрированный класс соответствует).
Правильно ли что-то подобное?
- (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 (поэтому нет сохранения / выпуска)