界面传值时数组赋值有关问题

界面传值时数组赋值问题

今天调了一个bug费了很多时间,这里做一下笔记。

项目中简单的两个控制器进行属性传值

YuLanViewController *vc = [[YuLanViewController alloc] init];
vc.dataArray = self.images; 
vc.returnDataBlock = ^(NSInteger indexOfData) {
     [self.images removeObjectAtIndex:indexOfData];
     // 刷新
     [self configImages];
};
[self.navigationController pushViewController:vc animated:YES];

在vc界面对dataArray做操作,删除一张图片,在pop回去上一个界面的images也是变化了。

原因是:vc.dataArray = self.images; 直接赋值造成指针地址拷贝,修改同一个对象

解决:   vc.dataArray = self.images.mutableCopy; // 返回对象的地址和方法接收者的地址不一样,所以本身对象的增加,删除等操作不影响另一个

界面传值时数组赋值有关问题
同时也可以看到,两个数组中存储的对象地址都是一样的,就是指针赋值。

所以啊 我在vc删除一张图片之后用了一个block操作来同步刷新前一个界面的数据,然后一直数组越界,就是因为相当于做了2次删除操作。