NSThreaded设计中的委托?(iPhone)
我在我的应用程序中使用了大量非常小的web服务,我已经走过了几条无法按预期扩展或工作的道路 我考虑的设计方法是: viewController的任务是从通用WebServices类请求一组数据,此任务在新的NSThread中启动->这将实例化一个仅检索xml并将其返回给WebServiceClass的对象->WebServiceClass现在实例化一个仅能解析来自此特定web服务的xml的对象。然后,解析器将一个好的实体对象返回给webServiceClass。WebserviceClass现在需要将此数据通知viewController viewController实现webServiceClassDelegate和一些委托方法,以查看web服务请求是否按计划进行。e、 g.-(无效)AWebService失败和-(无效)AWebService成功 0.5由于运行的WebserviceClass是另一个NSThread,在父对象的主NSThread上调用委托方法是否会有问题 1.0我认为这个设计是合理的,因为它将实体的检索、解析和返回完全集中在不同的类中。但是,我必须为每个不同的Web服务编写委派方法并在每一步上实现委派协议。i、 e.从底部开始,WebserviceClass必须为检索XML的对象(开始、失败、成功)和解析XML的对象(开始、失败、成功)实现委派方法WebserviceClass必须能够将这些响应中的每一个委托给viewController,而viewController又必须实现WebserviceClass中的委托方法(start、fail、success)。 有没有更简单的方法 我有一些设计模式的经验,但不是像Objective C那样使用委托的语言。在AS3或Java中,我会有一些事件,这些事件可能会在对象中冒泡出来,并通知正在听更改的人。在我阅读的所有客观示例代码中,我只看到NSNotification(相当于AS3或Java“事件”)使用了0.1%的时间 我所描述的设计将使我能够完美地扩展许多web服务,并使我能够完全控制潜在错误/异常发生的位置,但要获得这种松耦合,似乎需要大量代码 1.1或者我应该完全接受授权方法并开始工作:)NSThreaded设计中的委托?(iPhone),iphone,cocoa,nsthread,delegation,Iphone,Cocoa,Nsthread,Delegation,我在我的应用程序中使用了大量非常小的web服务,我已经走过了几条无法按预期扩展或工作的道路 我考虑的设计方法是: viewController的任务是从通用WebServices类请求一组数据,此任务在新的NSThread中启动->这将实例化一个仅检索xml并将其返回给WebServiceClass的对象->WebServiceClass现在实例化一个仅能解析来自此特定web服务的xml的对象。然后,解析器将一个好的实体对象返回给webServiceClass。WebserviceClass现在
谢谢你的指点和帮助。我不是要源代码之类的,更多的是“在你刚才描述的每天的情况下,这被认为是目标C中的最佳实践”:我建议看一下
ASIHttpRequest
(可获得)和NSOperation
+NSOperationQueue
(文档)。我不认为你应该运行一个长期的线程来一直与你的web服务对话,除非你绝对需要一个持续的连接
基本上ASIHttpRequest和NSOperation都封装了所有的网络和线程内容。操作使得iPhone上的多线程非常好。本质上,您创建了一个操作(为了方便使用,通过工厂或其他方式),将其放入队列中并对结果进行处理
至于您如何处理结果(这也适用于您的原始场景和0.5和1.1),通常情况下,您的操作/线程将调用didSucceedAtGettingWhatever
或didFailWithError:(NSError*)
方法。委派几乎是通过电话提出请求的实际方式。如果有多个委托,那么您可以像在Java中一样使用subject observer
至于1.0,最终答案是否定的。我们通常会使用OperationDelegate和OperationTypes。根据哪个OperationType成功或完成,我们有不同的逻辑。这并不是最好的,有很多不同的方法可以做到这一点,但是无论你做什么,你都必须为不同的事件有不同的逻辑。这是一种方法还是多种方法取决于您。非常感谢Malaxer!写下像我这样的问题总是很健康的,当我写的时候,我得到了一些见解,我几乎没有点击“帖子”。现在我很高兴我做到了。在阅读ASIHTTPRequest文档时,我还想到了该库同时提供了同步和异步请求方法。使用委托的意义仅在处理异步代码时相关。如果我已经在一个单独的NSThread中完成了整个任务,那么就没有必要将所有子例程分割成线程。所以我的getData和ParseData应该直接返回我的值。如果出现问题,我不在乎它是否异步发生,我只需要通知“Upper”它出了问题。WebserviceClass将获得大量的逻辑,但在工厂式的设计中,它将只考虑所有可能的结果,并返回适合此场景的对象。我现在感觉好多了,谢谢:)