2010-07-07 106 views
2

在iPhone应用程序内访问Web服务是一件我尚未找到清晰,美观的解决方案的问题。我不是在讨论如何发送查询或解析回应,而是谈论“大图”答案。iPhone +网络服务最佳实践

忽视服务器端技术,您将如何将Model对象插入Web Service?你如何设计你的代理对象?你如何缓存你的资源?

回答

5

如果您的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?