Ios 如何实现UITableView重载数据之类的功能
我有一个自定义控件,其数据源类似于UITableView的工作方式。我还添加了一个重载数据函数来加载新数据 我希望每次运行循环调用一次重载数据实现,以避免多次重载相同的数据 这是我当前的实现:Ios 如何实现UITableView重载数据之类的功能,ios,uitableview,nstimer,nsrunloop,Ios,Uitableview,Nstimer,Nsrunloop,我有一个自定义控件,其数据源类似于UITableView的工作方式。我还添加了一个重载数据函数来加载新数据 我希望每次运行循环调用一次重载数据实现,以避免多次重载相同的数据 这是我当前的实现: func reloadData(){ guard reloadDataScheduled == false else{ return } self.reloadDataScheduled = true NSRunLoop.currentRunLoop().
func reloadData(){
guard reloadDataScheduled == false else{
return
}
self.reloadDataScheduled = true
NSRunLoop.currentRunLoop().performSelector("innerReloadData", target: self, argument: nil, order: 0, modes: [NSDefaultRunLoopMode])
}
innerReloadData是一个私有函数,它实际执行加载,并将reloadDataScheduled设置为false
这似乎在大多数情况下都有效,但在其他情况下,它似乎延迟超过2秒,这不是我想要的
我需要深入了解runloop的延迟或任何关于如何实现这种实现方式的建议。在这种情况下,我通常使用以下代码
- (void)setNeedsReloadData
{
// cancel all previous schedules
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(reloadData) object:nil];
// below codes schedule "immediately run after current fetching on runloop"
[self performSelector:@selector(reloadData) withObject:nil afterDelay:0];
}
- (void)reloadData
{
// cancel the others schedules
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(reloadData) object:nil];
// Reload Data
...
}
你可以随时调用-[XXX setneedsroaddata]
。
reloadData
将在runloop上每次抓取运行一次
斯威夫特诗集
- 在swift 1.1之前-
[NSObject performSelector:withObject:afterDelay:][/code>被阻止
- swift 2.0之后-现在是允许的
setNeedsDisplay
或setNeedsLayout
的基础上进行构建吗?是的,它是一个UIView子类。是的,它似乎按照预期工作。我只是希望我能知道为什么实际的nsrunlop没有。谢谢。-[self-performSelector:@selector(reloadData)with Object:nil afterDelay:0]
是NSRunLoop.currentRunLoop()的便捷方法。performSelector(“reloadData”,目标:self,参数:nil,顺序:0,模式:[NSDefaultRunLoopMode])
您可以使用您想要的任何代码。无论如何,当触发reloadData
或setneedsroaddata
时,您应该取消以前的计划,您将获得更多的运行循环信息