在iOS开发过程中经常会用到界面之间的传值,提到传值大家立马就能说出来很多种方式:比如,最简单的属性传值;还有代理传值、block传值、通知传值、KVO传值、单例传值、NSUserDefaults传值、文件(Json、XML、plist)传值、数据库传值等等。今天给大家介绍另外一种传值方式 - 数组传值,很巧妙的利用了指针的原理把值在页面之间传递。
下边分步骤来说一下数组+指针的传值方式:
一、打开Xcode新建Single View Application,然后在创建一个SecondViewController。在Storyboard里边进行关联,并且在ViewController中创建一个按钮,点击之后进入SecondViewController里边,如图:
![](https://img.haomeiwen.com/i190758/06b2b2bda5506f83.png)
二、在ViewController中声明一个可变数组的属性valueArray,并在viewDidLoad中初始化。在初始化后紧接着log输出valueArray的值和内存地址方便后边进行比较,如图:
![](https://img.haomeiwen.com/i190758/d207331e82ded5c7.png)
三、在SecondViewController的头文件中创建一个可变数组的属性receiveArr,如图:
![](https://img.haomeiwen.com/i190758/5f2d4027e4f7a4b9.png)
四、在ViewController进行页面切换的时候把valueArray的值传递给receiveArr,如图:
![](https://img.haomeiwen.com/i190758/c4cb854ed9eb4e69.png)
五、在SecondViewController的viewDidLoad方法中先打印看一下receiveArr的值和内存地址,然后我在receiveArr中用addObject方法添加两个元素,之后再打印一次receiveArr的值和内存地址,如图:
![](https://img.haomeiwen.com/i190758/360ddee4dc3b870c.png)
六、在SecondViewController页面返回ViewController的时候,在viewWillAppear中打印valueArray的值,看看是否增加,如图:
![](https://img.haomeiwen.com/i190758/2d8a8fffda5346c7.png)
七、运行之后控制台输出如下:
![](https://img.haomeiwen.com/i190758/43017c8360d221b7.png)
可以看出来第一次初始化之后valueArray的值是空的,因为没有进行赋值。第二次viewWillAppear方法里也没有赋值所以也是空的。
八、当点击进入SecondViewController之后,控制台输出信息:
![](https://img.haomeiwen.com/i190758/0c6c8a154a48094c.png)
可以看出因为valueArray之前是空数组,所以一开始receiveArr的值也是空。但是receiveArr和valueArray的指针都是同一个内存地址,这也就印证了指针的原理,赋值操作其实是将receiveArr指针地址指向了valueArray的内存地址。
通过addObject方法添加元素之后,现在receiveArr中就有了两个值。
九、在SecondViewController点击返回后控制台输出信息:
![](https://img.haomeiwen.com/i190758/7ba53cb2aeda1a09.png)
现在就把值从SecondViewController传到了ViewController里边。
十、最后需要注意的是在SecondViewController中我写了一个Warning警告,数组传值需要注意的是不能使用arrayWithObjects方法或者alloc、init等初始化方法添加元素。这样系统会为数组重新分配内存地址,就达不到传值的目的了。
项目源码链接: https://pan.baidu.com/s/1geU0A3L 密码: 8pqv
欢迎大家关注“”芒果iOS微信公众账号,芒果会经常为大家分享好的技术文章:
还可以关注芒果iOS CSDN技术博客:
http://blog.csdn.net/crazyzhang1990
![](https://img.haomeiwen.com/i190758/1e6a437866d65278.jpg)
网友评论