• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - NSClassFromString 行为不端和缓存类

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:01:24 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

的后代

我有一个带有类名称的 NSArray,我正在使用它进行迭代:

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

然后:

- (UITableViewCell *)tableViewUITableView *)tableView 
                                   cellForRowAtIndexPathNSIndexPath *)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

我错过了什么吗?



Best Answer-推荐答案


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

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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap