为处理服务器请求的方法选择正确的设计模式

时间:2011-06-14 19:46:32

标签: design-patterns

我正在创建一个iPhone应用程序,它与我的网络服务器进行通信。使用JSON完成通信。现在我想知道处理这个问题的最佳方法是什么。我目前正在开始第三次尝试尽我所能获得此代码,但我仍然不完全确定。

在我第一次尝试时,我尝试使用普通的委托属性设置一个普通的类(用于告诉类在请求完成后回调应该去哪里)。这种方法失败了,因为实例化类的麻烦,设置委托(负责回调的对象),调用方法然后再次清理它。有时需要链接类的方法,以获取我的应用程序中某些页面所需的所有数据,并重新实例化类会导致大量内存问题并在链接事件中重用对象(服务) ,让我提供所有回调方法的当前对象的参考...让我说,这不是理想的。

我的第二次尝试是让类成为Singleton,我指定哪个委托应该接收回调调用的每个方法。这导致了一些令人讨厌的代码更改(将代理对象存储在某处,一旦请求完成就可以检索)。使用Singleton时链接方法要容易得多,但不知怎的,我觉得我完全滥用了它。

该类有大约25到35个方法,可以有2个结果:它既可以工作也可以失败(带有特定的错误代码和消息)。所以我们讨论的是需要调用的25 - 35 * 2回调方法。

所以我不是要求任何代码示例,但我想知道人们是否可以给我一些关于如何解决这个问题的新见解。

2 个答案:

答案 0 :(得分:1)

我不知道它是否完美,但也许我可以通过告诉我如何与Twitter进行沟通来帮助你。基本上有一些类可以完成所有这些,但我会总结它,好像只有一个类。

基本上,类被实例化,并立即调用自动释放。它获得一个委托,并发出请求。整个过程需要3行代码加上每行POST参数或GET查询参数的一行代码。使用OAuth进行身份验证也需要一行([request setAuthenticator:[MyNameOAuthAuthenticator authenticatorWithCredentials:...]])。

调用-[req execute]时,它会调用[self retain]来补偿自动释放。当请求本身完成(或错误)时,将使用JSON对象通知委托,并调用[self release]。这会解决所有内存问题。

我的代码目前以一种只需至少执行一行(!)的方式构建:[[[[MyRequest alloc] initWithHTTPMethod:httpMethodGET andURL:[NSURL URLWithString:...]] autorelease] execute]

也许这会有所帮助:)

答案 1 :(得分:0)

我不知道这是否有帮助,但我想我不久前回答了类似的问题。看看how to structure classes i an iphone application

相关问题