在init方法中确定类

时间:2011-11-14 17:17:54

标签: objective-c cocoa foundation

我有一个包含Class个对象和NSString个键的全局词典。我的Property类的每个自定义子类都可以使用

Property超类上注册自己
+ (void)registerPropertyClass:(Class)pclass forNamePrefix:(NSString *)namePrefix

使用Propertyname初始化value。我现在要做的是根据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(因此没有保留/释放)

1 个答案:

答案 0 :(得分:1)

如果没有编译它,那将会起作用,但在手动保留释放下会泄漏。在重新分配release之前,您需要self self = [instance init];

使用ARC,应该没问题。