使用 NSObject 的哈希属性标识可重用单元格是否正确?



我有一个NSMutableArray的自定义对象和他们中的每一个我想在UITableView中显示适当的行。数组会不断变化,显然TableView也是如此。我的对象不维护任何唯一标识符,所以我想知道如何在tableView:cellForRowAtIndexPath:方法中识别它们以进一步重用。

使用对象的hash属性是一个好方法吗?如下所示?

MyGroup *group = groups[indexPath.row];
NSString *reuseId = [NSString stringWithFormat:@"group_id_%d", group.hash];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
if (cell == nil) {
    // ... init cell ...
}

我认为一个特殊的情况可能会发生,当我从groups数组中删除一些对象,然后添加一个不同的对象,恰好具有相同的哈希作为被删除的对象之一。这会使渲染变得混乱,因为UITableView会重用为不再存在的对象创建的旧单元格。

这个担心合理吗?是否有其他(可靠的)方法来识别使用字符串值的对象实例,该字符串值在应用程序生命周期内保持唯一?

答案:我误解了可重用单元格标识符的概念。每个单元格不需要有唯一的重用标识符,事实上这样做是错误的,因为它会阻止UITableView重用单元格。

最新更新