为什么从JSON中检索数据需要花费大量时间?

时间:2015-07-16 23:11:29

标签: json swift

我的iPhone需要至少15-35秒才能完成这些循环。我主要在StackOverflow上学习了JSON,这就是人们这样做的方式。这些数组内部有3个元素,每个元素都有一个文本和一个小图像

if let parseJSON = json{
    let succes = parseJSON["data"]
    let item = self.success["catalogue_products"] as! [[String: AnyObject]]

if item.isEmpty == false{
    for i in item {
        var categoryName = i["category_name"] as! String
        if self.category == nil{
            self.category = categoryName
            self.categories.append(self.category)
            self.categoryCount = 1
        }

        if self.category != categoryName{
            self.categoryCount += 1
            self.category = categoryName
            self.categories.append(self.category)
        }

        var deep = i["products"] as! [[String: AnyObject]]
        for i in deep{
            var product = ProductCatalogue()
            product.categoryName = categoryName
            product.id =  i["id"]
            println(product.id)
            product.name = i["name"]
            product.imageUrl = i["image"]
            product.value = i["value"]
            var volumes = (i["volumes"] as? [AnyObject])!

            var check = true
            for i in volumes{
                if check == true {
                    product.volumeMin = i
                    check = false
                } else {
                    product.volumeMax = i
                    check = true
                }
            }
            product.colors = i["colors"] as! [[String: AnyObject]]
            for i in product.colors{
                let temp: AnyObject? = i["code"]
                product.colorCode.append(temp!)
                let url2: AnyObject? = i["image"]
                product.colorImageUrl.append(url2!)
            }

            let url = NSURL(string: String(stringInterpolationSegment: product.imageUrl))
            let data = NSData(contentsOfURL: url!)
            product.image = UIImage(data: data!)

            if product.colorImageUrl.isEmpty == false {
                for i in 0...(product.colorImageUrl.count - 1) {
                    let url1 = NSURL(string: String(stringInterpolationSegment: product.colorImageUrl[i]))
                    let data1 = NSData(contentsOfURL: url1!)

                    switch i {
                    case 0: product.color1 = UIImage(data: data1!)
                    case 1: product.color2 = UIImage(data: data1!)
                    case 2: product.color3 = UIImage(data: data1!)
                    case 3: product.color4 = UIImage(data: data1!)
                    case 4: product.color5 = UIImage(data: data1!)
                    case 5: product.color6 = UIImage(data: data1!)
                    case 6: product.color7 = UIImage(data: data1!)
                    default: println("")
                }
            }
        }
        self.array.append(product)
    }
}

self.sortinOut()
self.loadScreen()

1 个答案:

答案 0 :(得分:5)

因为您正在制作许多HTTP请求。首先是一个for循环,这根本不是一个好主意,第二次是在嵌套循环中,在我的想法中是一个错误的错误。这样处理HTTP请求时效率不高,速度快。

如果您愿意获取大量数据,请在REST API中创建JSON并获取一次。

如果您没有REST API并且只是从网络上获取图像,请尽可能提高请求的效率。另外,尝试通过调用GCD异步功能来异步获取图像。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
     // download image
});

希望有所帮助