cos*_*smo 1 objective-c uitableview nsindexset ios
我是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];
}
}
Run Code Online (Sandbox Code Playgroud)
为什么NSIndexSet代表这里的部分?另外,在这个例子sectionIndex中只是一个数字,它是否NSIndexSet只有一个数字?如果只有一个数字,为什么不用a 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来保证每个条目的唯一性(它是一组)并且允许很高的存储和计算效率.
(他们不能要求一个Int数组,因为你不能把一个Int放到一个NSArray中;它必须是一个对象.再次,这增加了NSIndexSet的效率 - 没有必要打开所有那些NSNumber !一组NSNumber将是一种非常低效的方式来传达这些信息.)
现在针对您的特定问题:它不必只是一个数字!注意名称:deleteSections:.最后看到"s"?您可以在一个命令中删除多个部分.事实上,在这种情况下,您恰好只删除了一个部分.并且因此没有效率损失.
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |