芒果iOS开发之界面传值方式-数组回传值

在iOS开发过程中经常会用到界面之间的传值,提到传值大家立马就能说出来很多种方式:比如,最简单的属性传值;还有代理传值、block传值、通知传值、KVO传值、单例传值、NSUserDefaults传值、文件(Json、XML、plist)传值、数据库传值等等。今天给大家介绍另外一种传值方式 - 数组传值,很巧妙的利用了指针的原理把值在页面之间传递。

下边分步骤来说一下数组+指针的传值方式:

一、打开Xcode新建Single View Application,然后在创建一个SecondViewController。在Storyboard里边进行关联,并且在ViewController中创建一个按钮,点击之后进入SecondViewController里边,如图:

芒果iOS开发之界面传值方式-数组回传值_第1张图片

二、在ViewController中声明一个可变数组的属性valueArray,并在viewDidLoad中初始化。在初始化后紧接着log输出valueArray的值和内存地址方便后边进行比较,如图:

芒果iOS开发之界面传值方式-数组回传值_第2张图片

三、在SecondViewController的头文件中创建一个可变数组的属性receiveArr,如图:

芒果iOS开发之界面传值方式-数组回传值_第3张图片

四、在ViewController进行页面切换的时候把valueArray的值传递给receiveArr,如图:

芒果iOS开发之界面传值方式-数组回传值_第4张图片

五、在SecondViewController的viewDidLoad方法中先打印看一下receiveArr的值和内存地址,然后我在receiveArr中用addObject方法添加两个元素,之后再打印一次receiveArr的值和内存地址,如图:

芒果iOS开发之界面传值方式-数组回传值_第5张图片

六、在SecondViewController页面返回ViewController的时候,在viewWillAppear中打印valueArray的值,看看是否增加,如图:

芒果iOS开发之界面传值方式-数组回传值_第6张图片

七、运行之后控制台输出如下:

芒果iOS开发之界面传值方式-数组回传值_第7张图片

可以看出来第一次初始化之后valueArray的值是空的,因为没有进行赋值。第二次viewWillAppear方法里也没有赋值所以也是空的。

八、当点击进入SecondViewController之后,控制台输出信息:

芒果iOS开发之界面传值方式-数组回传值_第8张图片

可以看出因为valueArray之前是空数组,所以一开始receiveArr的值也是空。但是receiveArr和valueArray的指针都是同一个内存地址,这也就印证了指针的原理,赋值操作其实是将receiveArr指针地址指向了valueArray的内存地址。

通过addObject方法添加元素之后,现在receiveArr中就有了两个值。

九、在SecondViewController点击返回后控制台输出信息:

芒果iOS开发之界面传值方式-数组回传值_第9张图片

现在就把值从SecondViewController传到了ViewController里边。

十、最后需要注意的是在SecondViewController中我写了一个Warning警告,数组传值需要注意的是不能使用arrayWithObjects方法或者alloc、init等初始化方法添加元素。这样系统会为数组重新分配内存地址,就达不到传值的目的了。

项目源码链接: https://pan.baidu.com/s/1geU0A3L 密码: 8pqv

欢迎大家关注“”芒果iOS微信公众账号,芒果会经常为大家分享好的技术文章:

还可以关注芒果iOS CSDN技术博客:

http://blog.csdn.net/crazyzhang1990

芒果iOS开发之界面传值方式-数组回传值_第10张图片
芒果iOS公众账号

你可能感兴趣的:(芒果iOS开发之界面传值方式-数组回传值)