在ios开发中,我们经常需要用到传值来实现对数据的传递和加载,不管是跨页面的传值还是不跨页面的传值,关于传值的实现我简单的做了以下总结:
一:利用通知(NSNotificationCenter)进行传值:
首先我们从ViewController跳到RootViewController中,在RootViewController中写如下代码:
然后在ViewController里面接收这个通知,一定要在主线程里面比如:viewDidLoad函数里面添加这句代码:
之所以用weak属性设置代理是为了防止循环引用,然后在RootViewController.m中添加如下代码:
最后回到我们的ViewController.h文件中,引用RootViewController.h头文件,并遵守协议,如:
在ViewController.m文件中,实现代理方法
这样我们就实现了代理传值的方法,是不是很简单?
三:利用Block实现传值:
跟上面的第一步一样,我们先从ViewController跳到RootViewController中,在RootViewController.h中声明block,写如下代码:
然后在RootViewController.m中创建这个block,如:
最后我们在ViewController.m跳转的方法中实现对block的回调,如:
这样我们就实现了利用block实现传值的过程。
三:利用NSUserdefault来实现传值,NSUserdefault能够在沙盒中保存少量的数据,我们可以在某个地方把数据存储到沙盒,然后在别的地方通过读取沙盒,来取到其中的数据实现数据的传递,一般我们很少会使用这种方法。简单步骤如下:
然后在ViewController.m中添加如下代码就可以实现传值效果:
四:利用单例实现传值:
首先我们要先创建个单例,比如:MyName对象,在MyName.h中,如下:
然后在MyName.m中实现+(MyName *)sharedDataName方法,如:
然后在RootViewController.m中实现下面方法:
最后在ViewController.m中添加如下代码就可以实现利用单例传值:
五:利用属性传值,这个是最简单的传值方式,一般新手用的比较多,简单来说就是在调整方法对对象进行初始化以后直接拿到这个值对对象的某个属性进行赋值,如下:
但是属性传值局限性较大,使用较少。暂时先总结这些,当然或许可能会有更好的传值方式,如果你知道,那请留言告之,一定感激不尽,如果有写的不好的地方,欢迎指正,同时也希望能够相互交流,共同进步!感谢你的观看!如转载,请附上链接,谢谢!