我有一个包含Class
个对象和NSString
个键的全局词典。我的Property
类的每个自定义子类都可以使用
Property
超类上注册自己
+ (void)registerPropertyClass:(Class)pclass forNamePrefix:(NSString *)namePrefix
使用Property
和name
初始化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(因此没有保留/释放)
答案 0 :(得分:1)
如果没有编译它,那将会起作用,但在手动保留释放下会泄漏。在重新分配release
之前,您需要self
self = [instance init];
。
使用ARC,应该没问题。