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 = @[@"X1",@"X2",@"X3",@"X4"];
</code></pre>
<p>然后:</p>
<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString * identifier = @"cellId";
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(@"%@",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(&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]