代码之家  ›  专栏  ›  技术社区  ›  RickiG

无螺纹设计中的委托?(iPhone)

  •  0
  • RickiG  · 技术社区  · 15 年前

    我在我的应用程序中使用了大量非常小的网络服务,我已经走了几条不按需扩展或工作的道路。

    我考虑的设计方法是: ViewController的任务是从常规WebServicesClass请求一组数据,此任务在新的nsThread中启动->这将实例化一个仅检索XML并将其返回到WebServicesClass的对象->WebServicesClass现在实例化一个仅能解析来自此部分的XML的对象。Ular Web服务。然后,分析器将一个不错的实体对象返回到WebServiceClass。WebServiceClass现在需要将此数据通知ViewController。

    ViewController实现WebServiceClassDelegate和一些委托方法,以查看Web服务请求是否按计划进行。例如-(void)awebServiceFailed和-(void)awebServiceSuccess。

    零点五 由于正在运行的WebServiceClass是不同的nsthread,在父对象中的主nsthread上调用委托方法会有问题吗?

    我认为这个设计听起来很合理,因为它完全包含了不同类中实体的检索、解析和返回。但是,对于每一个不同的Web服务,我必须在每一步上编写委托方法并实现委托协议。即,从底部开始,WebServiceClass必须为检索XML的对象(start、fail、success)实现委托方法,然后为解析XML的对象(start、fail、success)实现委托方法,并且WebServiceClass必须能够将这些响应中的每一个委托给必须再次实现委托满足的ViewControllerWebServiceClass的方法(开始、失败、成功)。 有更简单的方法吗?

    我有一些设计模式的经验,但不是从使用委婉一致的语言作为目标C。在AS3或Java中,我会有一些事件可以通过对象冒泡,并告诉任何正在听变化的人。在我读过的所有目标示例代码中,我只见过0.1%次使用的NSNoVi饰件(相当于AS3或Java'事件)。

    我所描述的设计将为我提供一些对于许多Web服务都能完美扩展的东西,并使我能够完全控制潜在错误/异常的发生位置,但获得这种松散耦合似乎需要很多代码。

    一点一 或者我应该完全接受授权的方法并开始工作:)

    感谢您的指点或帮助。我不要求源代码或类似的东西,而是“在您刚才描述的每天的情况下,在目标C中,这被认为是最佳实践”:)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Malaxeur    15 年前

    我建议你看看 ASIHttpRequest (可获得 here ) NSOperation + NSOperationQueue (DOCS) here )我不认为你应该运行一个长期运行的线程来一直与你的Web服务对话,除非你绝对需要一个持续的连接。

    基本上,asihttpRequest和nsOperation都封装了所有的网络和线程。操作使得iPhone上的多线程非常好。本质上,您创建了一个操作(通过工厂或其他不易使用的操作),将其放入队列中,并对结果进行处理。

    至于你对结果做了什么(这也适用于你最初的场景,以及 0.5和1.1 )通常情况下,您的操作/线程将调用 didSucceedAtGettingWhatever didFailWithError:(NSError*) 方法。代表团在很大程度上是通过电话提出请求的诽谤方式。如果有多个委托,那么您可以使用主体观察器,就像您在Java中使用的一样。

    至于 最终没有。我们通常做的是我们有一个OperationDelegate和OperationType。根据哪个操作类型成功或完成,我们有不同的逻辑。这不是最伟大的,有很多不同的方法可以做到这一点,但是无论你做什么,你都必须对不同的事件有不同的逻辑。不管是在一个方法中还是在许多方法中,这都取决于您。