当前位置: 首页 > 面试题库 >

闭包中的Swift UITableView reloadData

夏振国
2023-03-14
问题内容

我相信我遇到了一个问题,即我的关闭发生在后台线程上,而UITableView的更新速度不够快。我正在打电话给REST服务,而在关闭时,我有一个tableView.reloadData()电话,但是要花几秒钟的时间才能发生。如何使数据重新加载更快(也许在主线程上?)

REST查询功能-使用SwiftyJSON库进行解码

func asyncFlightsQuery() {
    var url : String = "http://127.0.0.1:5000/flights"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, networkData: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil


        // Parse with SwiftyJSON
        let json = JSON(data: networkData)

        // Empty out Results array
        self.resultArray = []

        // Populate Results Array
        for (key: String, subJson: JSON) in json["flights"] {
            print ("KEY: \(key) ")
            print (subJson["flightId"])
            print ("\n")

            self.resultArray.append(subJson)
        }

        print ("Calling reloadData on table..??")
        self.tableView.reloadData()


    })
}

self.tableView.reloadData()调试器中调用一次


问题答案:

UIKit不是线程安全的。UI仅应从主线程更新:

dispatch_async(dispatch_get_main_queue()) {
    self.tableView.reloadData()
}

更新 。在Swift 3及更高版本中使用:

DispatchQueue.main.async {
    self.tableView.reloadData()
}


 类似资料:
  • 问题内容: 对于事件处理程序,可以在react中使用闭包吗?例如,我在导航中有一些功能和很多菜单,在导航组件中我使用的是这样的: 还是我应该只喜欢箭头功能? 第一个变种确实使代码更清洁,但是我担心大量此类元素的性能 问题答案: 两者都应避免。 虽然它们都可以工作,但是它们都具有相同的弱点,即它们会导致不必要的渲染,因为该函数是动态创建的,因此将呈现为不同的对象。 您不希望使用任何一种方法,而是要以

  • Rust 的闭包实现与其它语言有些许不同。它们实际上是trait的语法糖。在这以前你会希望阅读trait章节,和trait对象。 都理解吗?很好。 理解闭包底层是如何工作的关键有点奇怪:使用()调用函数,像foo(),是一个可重载的运算符。到此,其它的一切都会明了。在Rust中,我们使用trait系统来重载运算符。调用函数也不例外。我们有三个trait来分别重载: # mod foo { pub

  • 基本形式 闭包看起来像这样: let plus_one = |x: i32| x + 1; assert_eq!(2, plus_one(1)); 我们创建了一个绑定,plus_one,并把它赋予一个闭包。闭包的参数位于管道(|)之中,而闭包体是一个表达式,在这个例子中,x + 1。记住{}是一个表达式,所以我们也可以拥有包含多行的闭包: let plus_two = |x| { let

  • 问题内容: 我听说闭包可能会在计划于明年夏天发布的下一个Java标准中引入。 这种语法是什么样的? 我在某个地方读到,在Java中引入闭包比在Java 5中引入泛型要大得多。这是真的吗?利弊? (到目前为止,我们肯定知道下一个Java版本将不包含闭包) 要么 编辑: http://puredanger.com/tech/2009/11/18/closures-after- all/ :D edit

  • 闭包 函数对象可以通过作用域链关联起来,函数体内的变量可以保存在作用域中,这种特性称“闭包”。 要理解闭包,首先要理解嵌套函数的词法作用域规则:先看下列一段代码: var a = "Tom"; //全局变量 function curr () { var a = "Bob"; //局部变量 function () { return a; } ret

  • 本文向大家介绍Python中的闭包总结,包括了Python中的闭包总结的使用技巧和注意事项,需要的朋友参考一下 前几天又有人在我的这篇文章 python项目练习一:即时标记 下留言,关于其中一个闭包和re.sub的使用不太清楚。我在自己的博客上搜索了下,发现没有写过闭包相关的东西,所以决定总结一下,完善博客上Python的内容。 1. 闭包的概念 首先还得从基本概念说起,什么是闭包呢?来看下维基上