一次controller之间的传值

不管如何,先感谢 KVO的实现原理和具体应用 让我了解了观察者模式。

事情的起因无非不就是需求,大概就是三个controllerA、B、C,三者间存在跳转关系A->B->C,当C的Num刷新后更新后台数据,A要向后台获取数据并刷新UI。

首先我就想到了几种数据传递方式:

1、直接实例化,给controller赋值。

UIViewController *B = [[UIViewController alloc] init];

B.NUM = 1;

[self.navigationController pushViewController:B animated:YES];

这个只适合跳转页面时传值。

2、利用委托delegate。在B中声名委托,并在A中设置B的委托者为A,即B.delegate = A。然后在A中实现B的委托方法。最后实现B往A中传值。

一般这种方式都是B向A传值,当然A也可以利用委托向B传值,但是一般业务情况下,都是直接用1的方式传值。

3、block传值(块传值),这种传值方法很常用,十分灵活,但针对A->B的情况下,也是只能B传值于A。

当然还有几种传值方式,因为我不常用,且不熟悉,就不一一例举。

综上几个方法,想要实现跨controller传值,并不现实。

到这,应该特别说到观察者模式KVO,概括性讲,就是通知,监听一个值,查看其是否改变,若改变则通知说,这个值改变了,接着你可以做下一步操作。

返回我的需求,我想要跨controller传值,在C中的NUM我有可能是多次改变的,我不可能在每次改变的时候都去后台获取数据,这样仍然是浪费后台资源的。所以最后,我选择用轻量缓存NSUserDefaults,将我每次修改后的值记录起来,到了A的时候,在A即将出现的时候,即viewWillAppear中,获取num的值,再去根据NUM的值,是否去向后台刷新数据。


你可能感兴趣的:(开发笔记)