iphone – Objective-c异步通信:目标动作或授权模式?

iphone – Objective-c异步通信:目标动作或授权模式?,第1张

概述我正在处理一些异步通信情况(事件驱动的 XML解析,NSURLConnection响应处理等).我会尽量简单解释一下我的问题: 在我目前的情况下,有一个服务提供商(可以与xml解析器通信或进行一些网络通信)以及可以要求服务提供商异步执行其某些任务的客户端.在这种情况下,当服务提供商完成处理时,它必须将结果与客户端进行通信. 我试图找到一种模式或经验法则来实现这种事情,我看到3种可能的解决方案: 1 我正在处理一些异步通信情况(事件驱动的 XML解析,NSURLConnection响应处理等).我会尽量简单解释一下我的问题:

在我目前的情况下,有一个服务提供商(可以与xml解析器通信或进行一些网络通信)以及可以要求服务提供商异步执行其某些任务的客户端.在这种情况下,当服务提供商完成处理时,它必须将结果与客户端进行通信.

我试图找到一种模式或经验法则来实现这种事情,我看到3种可能的解决方案:

1.使用委托模式:客户端是服务提供商的委托,它将在任务完成后收到结果.

2.使用目标/ *** 作方法:客户机要求服务提供商执行一个任务,并传递一个选择器,一旦完成任务,就必须由服务提供商调用该选择器.

3.使用通知.

(更新)经过一段时间的尝试解决方案#2(目标和动作)后,我得出结论,在我的情况下,最好使用代理方法(#1).以下是每个选项的优缺点,就像我看到的那样:

授权方式:

> 1()选项1的优点是我们可以检查编译时错误,因为客户端必须实现服务提供者的委托协议.
> 1( – )这也是一个缺点,因为它使客户端与服务提供商紧密耦合,因为它必须实现其委托协议.
> 1()它允许程序员轻松地浏览代码,并找到服务提供商正在调用哪些方法传递其结果.
> 1( – )从客户端的角度来看,服务提供商一旦得到结果就不会容易找到哪种方法被调用.它仍然很容易,只是去委托协议方法,就是这样,但是#2的方法更直接.
> 1( – )我们必须写更多的代码:定义委托协议并实现它.
> 1( – )此外,应该使用委托模式来确定行为.这种情况在语义上不会是一个确切的授权情况.

行动/目标方法

> 2()选项2的上限是当正在调用服务提供者方法时,也必须指定@selector指定回调 *** 作,因此程序员知道将调用哪个方法来处理结果.
> 2( – )与此相反,很难找到在浏览服务提供商代码时将在客户端中调用哪种方法.程序员必须去服务调用,看看哪个@selector被传递.
> 2()这是一个更动态的解决方案,并且导致部件之间的耦合较少.
> 2( – )也许是最重要的事情之一:它可能导致运行时错误和副作用,因为客户端可以将不存在的选择器传递给服务提供商.
> 2( – )使用简单而标准的方法(#performSelector:withArgument:withArgument :),服务提供者只能传递最多2个参数.

声明:

>我不会选择通知,因为我认为当多个对象需要更新时,应该使用它们.此外,在这种情况下,我想直接告诉委托/目标对象在构建结果后该做什么.

结论:在这一点上,我会选择代理机制.这种方法提供了更多的安全性,并允许轻松浏览代码来跟踪发送代理服务提供者 *** 作的结果的后果.关于这个解决方案的消极方面是:它是一个更为静态的解决方案,我们需要编写更多的代码(协议相关的东西),并且在语义上,我们并不是在谈论真正的授权,因为服务提供者不会委派任何东西.

我错过了什么吗?你推荐什么和为什么?

谢谢!

解决方法 你错过了第三个选项 – 通知.

您可以让客户端观察来自服务提供商的通知,指示它有新的数据可用.当客户端收到此通知时,它可以从服务提供商处消耗数据.

这允许良好的松耦合;一些决定只是因为你是否想要推/拉系统.

@H_403_63@ 总结

以上是内存溢出为你收集整理的iphone – Objective-c异步通信:目标/动作或授权模式?全部内容,希望文章能够帮你解决iphone – Objective-c异步通信:目标/动作或授权模式?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1029108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存