AFnetworking Vs dispatch_aync() Vs SDWebImage 框架

Posted

技术标签:

【中文标题】AFnetworking Vs dispatch_aync() Vs SDWebImage 框架【英文标题】:AFnetworking Vs dispatch_aync() Vs SDWebImage Framework 【发布时间】:2014-01-27 10:05:14 【问题描述】:

我是 ios 编程新手。

我有一个要求,我必须多次进行服务器调用,提供大型 JSON,然后解析并显示在 TableView/Collection/ViewControllers

我必须在Collection Grid ViewUITableView 中下载图片,从而在用户滚动时开始/取消图片的下载。

所以

Q1)对于表格视图/网格视图中的图像下载,我正在考虑使用 Apple Table Lazy Loading Sample + 用 SDWebImage 替换图标下载器,如链接中提到的 Apple 示例中的几个问题和通过 SDWebImage我可以根据我的要求配置cache

编辑: 基本上我希望有一种非常透明的方式从 url 获取图像,所以首先在 NSCache 中查找它们,如果在磁盘(或核心数据)上找不到查找如果找不到,请再次下载异步,然后再次保存在缓存中。我猜 SDWebImage 提供了这个,但对于 AFNetworking,我必须查看内部代码并修改它。

iOS lazy-loading of table images

Q2) 对于服务器调用和JSON 解析,我是否应该使用dispatch_async 然后使用NSJSONSerialization 解析JSON 或者我应该使用AFNetworking 来解决这个问题

使用AFNetworking lib 的缺点是我只需要服务器调用并且不需要解析其他功能..因此,如果我要使用这个 lib,这将使应用程序大小增加 1.4 MB,因为我已经添加了 @ 987654337@ 框架 (>3 MB)。

这是我在谷歌搜索后发现的。 请建议我是否遗漏了什么......以及我应该遵循的任何其他方法。

【问题讨论】:

【参考方案1】:

AFNetworking 更好,可以处理您的这两个问题。您还可以将其用于解析和图像下载。如果图像视图请求相同的图像,它甚至可以缓存并且永远不会一次又一次地访问服务器。使用AFNetworking 中提供的UImageView 类别。

编辑 在 Afnetworking 中缓存阅读 this 提交的帖子。 如果您不想使用 AFNetworking 的全部功能而只想下载数据,我建议您不要使用它,您可以使用 NSURSession 完成所有操作,不要在项目中添加依赖项。使用NSURLSession 它的强大可以为您做得更好。您只需要一个NSJSONSerilization 调用即可将数据解析为NSObject,这没什么大不了的。

NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                         completionHandler:
     ^(NSData *data, NSURLResponse *response, NSError *error) 
         // ...
     ];

 [task resume];

【讨论】:

非常感谢您提供此信息。但我怀疑我们能否按照我们的要求在 AFNetworking 中配置缓存? 您有什么要求...您甚至可以扩展它,将缓存移动到磁盘或您想做的任何更改... github.com/AFNetworking/AFNetworking/pull/1136阅读这个链接你会发现一些有趣的缓存讨论。 感谢 C_X 的信息,但我决定通过关注此***.com/questions/8703877/… 选择 SDWebImage。你能看看这个吗?谢谢 SDWebImage 也是非常好的 API,您将包含更多的依赖项.. 否则很好。现在,如果您没有使用完整的 AFNetworking 功能,为什么不开始使用 NSURLSession 下载 JSON 数据,这也是一种选择。

以上是关于AFnetworking Vs dispatch_aync() Vs SDWebImage 框架的主要内容,如果未能解决你的问题,请参考以下文章

ASIHTTPRequest vs AFNetworking vs NSUrlRequest

restkit vs afnetworking vs mknetworkkit vs nsurlconnection有啥区别[关闭]

Application.Current.Dispatcher.BeginInvoke(action) VS。 Application.Current.Dispatcher.Invoke(action)

AFNetworking 获取 XML 解析错误的数据

dispatch_get_global_queue vs dispatch_get_main_queue

error LNK2001: 无法解析的外部符号