我的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()
答案 0 :(得分:5)
因为您正在制作许多HTTP请求。首先是一个for循环,这根本不是一个好主意,第二次是在嵌套循环中,在我的想法中是一个错误的错误。这样处理HTTP请求时效率不高,速度快。
如果您愿意获取大量数据,请在REST API中创建JSON并获取一次。
如果您没有REST API并且只是从网络上获取图像,请尽可能提高请求的效率。另外,尝试通过调用GCD异步功能来异步获取图像。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// download image
});
希望有所帮助