https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html
在上面的链接中,我看到以下有关模型层应如何与 ViewController 通信的内容。
“当模型对象发生变化时(例如,通过网络连接接收到新数据),它会通知控制器对象,控制器对象会更新相应的视图对象。”
我的问题是,模型对象如何通知控制器对象?有哪些不同的方法可以做到这一点?我的模型层获取用户的位置,然后调用 Web 服务。下载数据时我应该如何通知控制器对象?
有多种方法可以做到这一点,具体取决于您的具体情况。通常,您会使用协议/委托实现、键值观察或通知。有一个非常好的概述here http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/.
Edit:
我想我应该补充一下,正如对此答案的评论所提到的:使用回调块也是一个非常可靠的选择,具体取决于您的需求。关于什么解决方案最适合什么情况,有很多可能的决定因素,但以下是我遵循的总体概述。
如果保证一次只需要一个观察者:我通常使用块或委托。我个人的偏好是,如果只有一两个回调,我会使用块,因为这是它们的亮点,但如果有多个可能的方法,我会使用委托协议。
如果您可能需要多个观察者,我通过以下方式使用通知NSNotificationCenter
.
当我只需要观察实例上的特定属性而不是事件时,我使用键值观察。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)