NSClassFromString 行为不当和缓存 class

NSClassFromString misbehaving and caching class

我有一个 class X 和几个 classes X1,X2,X3,X4X

的后代

我有一个名为 class 的 NSArray,我用它来迭代:

_classnames = @[@"X1",@"X2",@"X3",@"X4"];

然后:

- (UITableViewCell *)tableView:(UITableView *)tableView 
                                   cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString * identifier = @"cellId";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier 
                                   forIndexPath:indexPath];
    if (!cell) {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier];
    }

    X * xshared = [NSClassFromString(_classnames[indexPath.row]) shared];
    cell.textLabel.text = [xshared title];
    return cell;
}

编辑: 有趣的是:

for (NSString * s in _classnames) {
    NSLog(@"%@",NSClassFromString(s));
}

tableView 调用之外工作

但是然后所有NSClassFromString return class X1

我是不是漏掉了什么?

我发现了错误,我发帖在这里只是为了完成。

在 class X 中,我声明 shared

+ (instancetype)shared {
    static id _shared = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _shared = [self new];
    });

    return _shared;
}

而且我没有在 child class 中实施 shared

shared 添加到 child class 中解决了问题。它 returns 总是第一个 class 实例化的原因很明显,但我没有看到。