gpt4 book ai didi

ios - 如何使用大 JSON 数据更快地填充 TableView

转载 作者:可可西里 更新时间:2023-11-01 02:23:00 24 4
gpt4 key购买 nike

我有一个应用程序可以使用 Alamofire 从我的服务器检索 json 数据。我使用 SwiftyJSON 解析此 json 数据,然后填充我的 TableView 。但是我遇到了性能问题,它非常慢,用接收到的数据(90 个订单)加载 TableView 需要 6 秒,并且随着订单数量的增加需要更长的时间。我认为问题不在于 Alomofire。我如何像 Twitter 或 Facebook 一样更快地解析和填充我的 TableView ?这是我的

// Order class
class Order {
var id:Int
var firstName:String
var lastName:String
var shippingAddress1:String
var dateTime:String
var total:String
var status:String

init(id:Int, firstName:String, lastName:String, shippingAddress1:String, dateTime:String, total:String, status:String){
self.id = id
self.firstName = firstName
self.lastName = lastName
self.shippingAddress1 = shippingAddress1
self.dateTime = dateTime
self.total = total
self.status = status
}
}

下面是我的订单 TableView Controller 代码。

 var api = API() // Making Alamofire requests
var orders = [Order]() // Order model

override func viewDidLoad() {
super.viewDidLoad()
self.makeCall() // Make api call to server
}

func makeCall(){
// Get orders
self.api.call(to: "orders?filter[limit]=100") { (result:NSDictionary?, error) -> () in
if error == nil{
self.setOrdersData(result!) // Received data
}
}
}

func setOrdersData(data:NSDictionary){
let json = JSON(data) // SwiftyJSON
let qos = Int(QOS_CLASS_USER_INITIATED.value)
// Process it in the background
dispatch_async(dispatch_get_global_queue(qos, 0), { () -> Void in

// Loop through the orders and parse them
for index in 0...json["orders"].count-1{
let id:Int = json["orders"][index]["id"].intValue
let firstName = json["orders"][index]["shipping_address"]["first_name"].stringValue
let lastName = json["orders"][index]["shipping_address"]["last_name"].stringValue
let shippingAddress1 = json["orders"][index]["shipping_address"]["address_1"].stringValue
let dateTime = json["orders"][index]["completed_at"].stringValue
let total = json["orders"][index]["total"].stringValue
let status = json["orders"][index]["status"].stringValue

// Append order to Order model
self.orders.append(Order(id: id, firstName: firstName, lastName: lastName, shippingAddress1: shippingAddress1, dateTime: dateTime, total: total, status: status))
}
// Get the main thread
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.orders.sort({$0.id > $1.id}) // Sort orders
self.tableView.reloadData() // Reload tableView
})
})
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:OrdersTableViewCell = tableView.dequeueReusableCellWithIdentifier("orderCell", forIndexPath: indexPath) as! OrdersTableViewCell
let order = self.orders[indexPath.row]

cell.labelAddress.text = order.shippingAddress1.capitalizedString
var fullName:String = order.firstName + " " + order.lastName
cell.labelFullName.text = fullName.capitalizedString

cell.labelAmount.text = "$\(order.total)"


cell.labelStatus.text = order.status
cell.labelTime.text = "\(order.dateTime)"
return cell
}

最佳答案

解决性能问题的第一步是分析。代码的哪一部分很慢?要么使用 Xcode 中的性能分析工具,要么将此代码拆分为单独的函数(无论如何都是一个好主意)并测量每个函数的运行时间。当您看到代码的哪一部分花费的时间最多时,您就可以制定一个计划来更改该部分。

关于ios - 如何使用大 JSON 数据更快地填充 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29828600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com