【问题标题】:iPhone + Web Services best practicesiPhone + 网络服务最佳实践
【发布时间】:2011-01-05 07:17:31
【问题描述】:

在 iPhone 应用程序中访问 Web 服务是一个我还没有找到清晰、漂亮的解决方案的问题。我不是在谈论如何在这里发送查询或解析响应,而是在谈论“大局”的答案。

不考虑服务器端技术,您如何/将如何将您的模型对象插入您的 Web 服务?你如何设计你的代理对象?你如何缓存你的资源?

【问题讨论】:

    标签: iphone cocoa-touch web-services


    【解决方案1】:

    如果您的 Web 服务恰好是 Ruby on Rails 应用程序,那么 Objective Resource 是一个很棒的工具:http://iphoneonrails.com/

    如果不是,那么我倾向于使用 ASIHTTPRequest (http://allseeing-i.com/ASIHTTPRequest/),它提供了一个很好的网络层。根据 API,您可以直接使用 ASI 对象,或者如果您想添加按请求功能(例如身份验证或响应解析),您可以子类化现有 ASI 类。

    您通常希望在后台运行请求,以便在等待请求完成时 UI 不会被阻塞。您始终可以使用后台线程路由,但是 ASIHTTPRequest 提供的一种不错的“Objective C”风格方法是提供一个在请求完成时调用的委托(另请参阅http://allseeing-i.com/ASIHTTPRequest/How-to-use 的“创建异步请求”)。在许多情况下,请求委托是发起请求的视图控制器。

    模型层取决于复杂性,以及数据的格式。我使用过的大多数 API 都使用 JSON,您可以使用 SBJSON 或 yajl-objc 对其进行解析。这些通常为您提供解析为 NSString、NSArray 和 NSDictionary 等基类的数据。有时这就足够了,或者如果您希望您的模型作为它们自己的类存在,那么您可以让模型从一个负责将 NSDictionary/NSArray 转换为属性的基类继承。

    最后,对于缓存,Core Data 提供了一种持久保存到磁盘的好方法。对于内存中的缓存,您可以让请求发生在控制器之间共享的单独“管理器”类中。这些管理器使用如下所述的 Singleton 设计模式:What should my Objective-C singleton look like?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2013-09-18
      • 2010-10-08
      • 2011-12-16
      • 1970-01-01
      • 2017-03-04
      • 2015-07-26
      相关资源
      最近更新 更多