Определить класс в методе init - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть глобальный словарь с 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 (поэтому нет сохранения / выпуска)

1 Ответ

1 голос
/ 14 ноября 2011

Без компиляции это будет работать, но при утечке вручную. Вам необходимо release self до переназначения self = [instance init];.

С ARC все должно быть в порядке.

...