我是iOS编程的新手。
我有一个要求,我必须多次执行服务器调用,提供大型JSON,然后在TableView
/ Collection
/ View
Controllers
中进行解析和显示。
我必须在Collection Grid View
和UITableView
内下载图片,从而在用户滚动时开始/取消下载图片。
所以
Q1)对于表格视图/网格视图中的图像下载我正在考虑使用Apple Table Lazy Loading Sample +将Icon Downloader替换为SDWebImage
的那个,如此处所述,链接Apple样本中的几个问题并通过{ {1}}我可以根据我的要求配置SDWebImage
。
编辑:基本上我想有一个非常透明的方式从网址获取图片,所以首先在NSCache中查找它们,如果没有找到磁盘上的图像(或核心数据)l如果没有找到再次下载异步,然后再次保存在缓存中。我猜SDWebImage提供了这个但是对于AFNetworking我必须查看代码并修改它。
iOS lazy-loading of table images
Q2)对于服务器调用和cache
解析,我是否应该使用JSON
然后使用dispatch_async
解析JSON
或者我应该使用{{1}这个
使用NSJSONSerialization
lib的缺点是我只需要服务器调用并且不需要解析任何其他功能..因此,如果我要使用此lib,这将使应用程序大小增加1.4 MB,因为我已经添加AFNetworking
框架(> 3 MB)。
这是我在大量谷歌搜索后发现的。 请建议我是否遗漏了某些东西......以及我应该遵循的任何其他方法。
答案 0 :(得分:0)
AFNetworking
更好,可以解决您的两个问题。您还可以使用它进行解析以及图像下载。它甚至可以缓存,如果图像视图请求相同的图像,它将永远不会再次进入服务器。使用UImageView
中提供的AFNetworking
类别。
修改强>
在Afnetworking中缓存阅读this次级邮件中的帖子。
如果您不想使用AFNetworking的全部功能并且只想下载数据,我建议您不要使用它,您可以使用NSURSession
执行此操作,不要在项目中添加依赖项。使用NSURLSession
它的强大功能可以为您做得更好。您只需要一次NSJSONSerilization
调用就可以将数据解析为NSObject
,这没什么大不了的。
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
// ...
}];
[task resume];