iphone - AFNetworking 缺少哪些主要的 ASIHTTPRequest 功能?

标签 iphone ios ipad asihttprequest afnetworking

work having recently stopped on ASIHTTPRequest ,似乎注意力正在转移到 AFNetworking .

但是,我还没有找到对两个库的功能进行很好的比较,所以我不知道如果/当我切换时我可能会失去什么。

到目前为止,我发现的主要区别是:

  • AFNetworking 的代码大小要小得多(这很好)
  • AFNetworking 正在快速改进(所以它可能还不成熟,可能还没有稳定的 API?)
  • 两者似乎都有缓存,尽管我看到了一些提示,因为 AFNetworking 使用 NSURLConnection it won't cache objects over 50K
  • ASIHTTPRequest 对手动和自动 (PAC) http 代理有很好的支持;我找不到有关 AFNetworking 对代理的支持级别的任何信息
  • AFNetworking 需要 iOS 4+,而 ASIHTTPRequest 可以直接返回到 iOS 2(对我来说不是问题,但对某些人来说是问题)
  • AFNetworking(还)没有内置的持久缓存,但有一个持久缓存,它有一个挂起的拉取请求:https://github.com/gowalla/AFNetworking/pull/25

  • 有没有人看到过对这两个库的任何很好的比较,或者任何从一个库切换到另一个库的记录经验?

    最佳答案

    我爱ASIHTTPRequest,我很伤心看到它去。然而,ASI 的开发者是对的,ASIHTTPRequest 变得如此庞大和臃肿,以至于他甚至无法花时间将其与 iOS 和其他框架的最新功能相提并论。我继续前进,现在使用 AFNetworking。

    也就是说,我必须说 AFNetworking 比 ASIHTTP 不稳定得多,对于我用它做的事情,它需要改进。

    在屏幕上显示结果之前,我经常需要向 100 个 HTTP 源发出 HTTP 请求,并且我已将 AFHTTPNetworkOperation 放入操作队列中。在下载所有结果之前,我希望能够取消操作队列中的所有操作,然后关闭保存结果的 View Controller 。

    这并不总是有效。

    我在使用 AFNetworking 时会随机崩溃,而使用 ASIHTTPRequest 时,此操作可以完美运行。我希望我能说出 AFNetworking 的哪个特定部分崩溃了,因为它在不同的点不断崩溃(但是,大多数情况下,调试器指向创建 NSURLConnection 对象的 NSRunLoop)。因此,AFNetworking 需要成熟才能像 ASIHTTPRequest 一样完整。

    此外,ASIHTTPRequests 支持客户端身份验证,AFNetworking 目前缺少这种身份验证。实现它的唯一方法是继承 AFHTTPRequestOperation 并覆盖 NSURLConnection 的身份验证方法。但是,如果您开始使用 NSURLConnection,您会注意到将 NSURLConnection 放在 NSOperation 包装器中并编写完成块并不像听起来那么难,您将开始思考是什么阻止了您转储第 3 方库。

    ASI 使用完全不同的方法,因为它使用 CFNetworking(基于 C 的低级基础框架)使下载和文件上传成为可能,完全跳过 NSURLConnection,并触及我们大多数 OS X 和 iOS 开发人员都不敢接触的概念。因此,您可以获得更好的文件上传和下载,甚至是网页缓存。

    我更喜欢哪个?很难说。如果 AFNetworking 足够成熟,我会比 ASI 更喜欢它。在那之前,我不得不佩服 ASI,以及它成为 OS X 和 iOS 有史以来最常用的框架之一的方式。

    编辑:
    我认为是时候更新这个答案了,因为在这篇文章之后事情发生了一些变化。

    这个帖子是前段时间写的,AFNetworking已经足够成熟了。 1-2 个月前 AF 发布了一个 POST 操作的小更新,这是我对框架的最后一次提示(一个小行结束错误是 AF 的 echonest 上传失败但使用 ASI 完成的原因)。身份验证不是 AFnetworking 的问题,对于复杂的身份验证方法,您可以将操作子类化并进行自己的调用,而 AFHTTPClient 使基本身份验证成为小菜一碟。通过继承 AFHTTPClient,您可以在很短的时间内创建一个完整的服务使用者。

    更不用说 AFNetworking 提供的绝对必要的 UIImage 附加功能。使用块和自定义完成块以及一些聪明的算法,您可以非常轻松地制作具有异步图像下载和单元格填充的表格 View ,而在 ASI 中,您必须制作操作队列以进行带宽限制,并注意根据以下情况取消和恢复操作队 ListView 可见性,以及类似的东西。此类操作的开发时间已减半。

    我也喜欢成功和失败块。 ASI只有一个完成块(其实就是NSOperation的完成块)。您必须检查完成时是否有错误并采取相应措施。对于复杂的 Web 服务,您可能会迷失在所有的“ifs”和“else”中;在 AFNetworking 中,事情变得更加简单和直观。

    ASI 在那个时代非常棒,但使用 AF,您可以完全改变处理 Web 服务的方式,并更轻松地制作可扩展的应用程序。我真的相信没有任何理由再坚持使用 ASI,除非你想针对 iOS 3 及更低版本。

    关于iphone - AFNetworking 缺少哪些主要的 ASIHTTPRequest 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529258/

    相关文章:

    ios - 无法在 Swift 中的其他 View Controller 中创建 View Controller 实例

    iphone - 我可以将 UITableView 分组背景图案用于 UIView 吗?

    objective-c - performSegue :withIdentifier: with popover style 后未调用 prepareForSegue

    ipad - iOS:在给定 Hz 参数的情况下,iPad 上的声音生成?

    iphone - 添加到窗口后自动调整 UIView 的大小

    ios - EKEvent 以编程方式创建,从 iPhone 日历中获取 EKEvent,识别两者 (EKEvents)

    iphone - 在没有证书的情况下将 iPhone 应用程序侧面加载到设备

    android - 从 3.4 更新到 cordova 5.1 后无法获取 appView

    c# - 如何在 Xamarian iOS 应用程序中单击按钮 X 秒后触发事件?

    ios - HealthKit - 获取血糖进餐时间