菜鸟教程小白 发表于 2022-12-12 14:01:24

ios - NSClassFromString 行为不端和缓存类


                                            <p><p>我有一个类 <code>X</code> 和几个类 <code>X1,X2,X3,X4</code> 是 <code>X</code></p> 的后代

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

<pre><code>_classnames = @[@&#34;X1&#34;,@&#34;X2&#34;,@&#34;X3&#34;,@&#34;X4&#34;];
</code></pre>

<p>然后:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView
                                 cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString * identifier = @&#34;cellId&#34;;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier
                                 forIndexPath:indexPath];
    if (!cell) {
       cell = [ initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier];
    }

    X * xshared = ) shared];
    cell.textLabel.text = ;
    return cell;
}
</code></pre>

<p><strong>编辑</strong>:
有趣的是:</p>

<pre><code>for (NSString * s in _classnames) {
    NSLog(@&#34;%@&#34;,NSClassFromString(s));
}
</code></pre>

<p>在 <code>tableView</code> 调用之外工作</p>

<p>然后所有 <code>NSClassFromString</code> 都返回类 <code>X1</code></p>

<p>我错过了什么吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我发现了错误,我在这里发布只是为了完成。</p>

<p>在 <code>X</code> 类中,我将 <code>shared</code> 声明为</p>

<pre><code>+ (instancetype)shared {
    static id _shared = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&amp;onceToken, ^{
      _shared = ;
    });

    return _shared;
}
</code></pre>

<p>而且我没有在子类中实现 <code>shared</code>。</p>

<p>向子类添加 <code>shared</code> 解决了这个问题。它总是返回第一个实例化的类的原因很明显,但我没有看到。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSClassFromString 行为不端和缓存类,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28302908/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28302908/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSClassFromString 行为不端和缓存类