Swift 生成大量数据,并实时加载到NSTableView中

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

我是OSX开发的新手,当我想在NSTableView中显示我生成的数据(大约100000行)时,我发现tableview的刷新不是很顺利。我希望在生成每个新数据时,tableview都能刷新,人们可以通过自己的眼睛来实现这个过程

以下是我代码的一部分:

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而不更新其他内容。是的,只需重新加载数据并滚动到主线程中的最后一行。正在另一个线程中生成数据