我有一个X类和几个X1,X2,X3,X4的后代X
我有一个带有类名的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返回类X1
我想念什么吗?

最佳答案

我发现了错误,为了完整起见,我将其发布在这里。

X类中,我将shared声明为

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

    return _shared;
}

而且我没有在子类中实现shared

在子类中添加shared可以解决此问题。它总是返回实例化的第一类的原因很明显,但我没有看到。

关于ios - NSClassFromString行为异常并缓存类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28302908/

10-10 20:28