繁体   English   中英

在ios tableview中,为什么部分是NSIndexSet?

[英]In ios tableview, why section is a NSIndexSet?

我是iOS开发的新手,所以这个问题很傻,但是我很难弄清楚以下代码的工作方式:

-(void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type{  

  if (type==NSFetchedResultsChangeDelete) {
       [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationAutomatic];
   }
}

为什么NSIndexSet代表这里的部分? 另外,在此示例中, sectionIndex只是一个数字,是否会使NSIndexSet成为仅包含一个数字的集合? 如果它只有一个数字,为​​什么不只使用int来表示它呢?

谢谢。

首先,NSIndexSet是什么。 NSIndexSet是表达唯一整数集合的一种极其有效的方法,其中许多整数很可能是连续的。

假设您要表达[1,2,3,4,5,10,11,12,13,14,15] 可以更紧密地表示为[{1,5},{10,6}] ,其中该符号表示两个范围NSMakeRange(1,5)NSMakeRange(10,6)

他们本可以要求提供一个NSNumber数组,但是作为NSIndexSet进行操作可确保每个条目(这是一个set )的唯一性,并可以极大地提高存储和计算的效率。

(他们不可能要求一个int数组,因为你不能把一个Int到一个NSArray;它必须是一个对象再次,这增加了的的NSIndexSet效率-没有必要解开所有这些NSNumbers !NSNumber数组将是一种非常低效的信息交流方式。)

现在针对您的特定问题:它不必只是一个数字! 注意名称: deleteSections: 看到最后的“ s”了吗? 您可以在一个命令中删除多个部分。 在这种情况下,您碰巧只删除了一个部分,这一点就不重要了。 从而不会损失效率。

NSIndexSet是唯一无符号整数的不可变集合,这些整数经过优化以用于存储数据结构的索引。 deleteSections:方法将NSIndexSet作为其参数,因为它允许程序员传递一组索引以进行删除。 在这种情况下,您只想删除一行,因此您只需传递一个成员的NSIndexSet。

更多信息: NSIndexSet文档deleteSections:方法文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM