Swift 生成大量数据,并实时加载到NSTableView中
我是OSX开发的新手,当我想在NSTableView中显示我生成的数据(大约100000行)时,我发现tableview的刷新不是很顺利。我希望在生成每个新数据时,tableview都能刷新,人们可以通过自己的眼睛来实现这个过程 以下是我代码的一部分:Swift 生成大量数据,并实时加载到NSTableView中,swift,macos,asynchronous,nstableview,Swift,Macos,Asynchronous,Nstableview,我是OSX开发的新手,当我想在NSTableView中显示我生成的数据(大约100000行)时,我发现tableview的刷新不是很顺利。我希望在生成每个新数据时,tableview都能刷新,人们可以通过自己的眼睛来实现这个过程 以下是我代码的一部分: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in //var endTime: NS
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in
//var endTime: NSTimeInterval!
for i in 1...100000 {
//generate
self.models.append(DBMSModel(time: self.generateTime(NSTimeInterval(i)), money: Float(i), payType: self.payType[i % 4], payPlace: self.place[i % 4]).contentData)
// endTime = NSDate().timeIntervalSince1970
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.mainTableView.reloadData()
let numOfRows = self.mainTableView.numberOfRows
if numOfRows > 0 {
self.mainTableView.scrollRowToVisible(numOfRows - 1)
}
})
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.performSegueWithIdentifier("ResultAlert", sender: endTime - startTime)
})
// self.performSegueWithIdentifier("ResultAlert", sender: endTime - startTime)
}
我使用一个新线程生成数据,然后通知主线程刷新tableview,但我可以意识到tableview只刷新了大约四次。如何改进此代码以使UI更高效地刷新?好吧,我似乎用一种愚蠢的方式解决了这个问题
for i in 1...100000 {
//generate
self.models.append(DBMSModel(time: self.generateTime(NSTimeInterval(i)), money: Float(i), payType: self.payType[i % 4], payPlace: self.place[i % 4]).contentData)
endTime = NSDate().timeIntervalSince1970
if i > 100 {
if i % (i / 100) == 0 {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.mainTableView.reloadData()
self.mainTableView.scrollToEndOfDocument(nil)
})
}
}
}
只需将tableview的重新加载数据次数减少到100次,我发现UI动画比以前更流畅…在主队列上做更少的工作,确保只更新UI而不更新其他内容。是的,只需重新加载数据并滚动到主线程中的最后一行。正在另一个线程中生成数据