objective-c - 在init方法中确定类

标签 objective-c cocoa foundation

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

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

属性使用名称进行初始化。我现在想做的是根据 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(因此没有保留/释放)

最佳答案

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

有了 ARC,应该没问题。

关于objective-c - 在init方法中确定类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8125405/

相关文章:

Objective-C 使用或不使用 "strong"

ios - 了解委托(delegate)与 block 。 (重构代码以使用委托(delegate)而不是 block )

cocoa - 如何消除编译器警告 "AppDelegate does not implement the NSTextView protocol"

cocoa - Cocoa 中的并发网络客户端

objective-c - 使用添加符号作为 NSImage

ios - 创建自定义 Collection View 布局

objective-c - NSBezierPath:创建一个 "curved"正方形

ios - 如何将平移手势从 UICollectionViewCell 传递给 UICollectionVIew?

swift - 关于 NSObject 用法的歧义?

ios - [__NSDictionaryI setObject :forKey:]: unrecognized selector sent to instance