一、dart 究竟是值传递还是 引用传递?
首先声明个人结论,有问题欢迎讨论
结论:基本数据类型是值传递,其他类型是引用传递
我在前期开发期间经常会踩的一个坑就是:
当传递(包含多字段的自定义数据类型的对象)时,经常会出现接收处修改了某一个属性值,导致传递处的数据变化。
写个简单的例子重现一下:
var aList = ['唱', '跳', 'rap'];
Human x1 =Human(aList, 1);
Human x2 = x1;
x2.age =2;
x2.habits.add('篮球');
print('''
x1 = $x1;
x2 = $x2;
''');
class Human {
List?habits;
int?age;
Human(this.habits, this.age);
Human.copyFrom(Human old) {
habits =List.from(old.habits ?? []);
age = old.age;
}
@override
StringtoString() {
return '$habits and age is $age';
}
}
那我通常的处理方式就是在bean里面提供一个copy方法,对list做处理,断开引用传递
当然实际开发中情况不一定这么简单,可能我们传递的并不是一个数据模型,有可能是我们的操作model,这个时候再去写copy方法可能就会有点麻烦,所以我们会祭出大杀器 Tojson 再 FromJson,懂?