昨天,我遇到了内存泄漏,我不明白为什么。
我使用 GetX 进行状态管理。
我有一个名为“EditContentController”的 GetXController,我在其中“加载”了一个对象,以便在用户编辑此对象时缓存所做的更改。
class EditContentController extends GetxController {
TextEditingController titleController;
TextEditingController descriptionController;
int newCompletionGoal;
List<int> newSchedule = [];
DateTime newCompletionDate;
@override
void onInit() {
titleController = TextEditingController();
descriptionController = TextEditingController();
super.onInit();
}
@override
void onClose() {
titleController.dispose();
descriptionController.dispose();
super.onClose();
}
void loadHabitValues(Habit habit) {
titleController.text = habit.title;
descriptionController.text = habit.description;
newCompletionGoal = habit.completionGoal;
for (var i = 0; i < habit.scheduledWeekDays.length; i++) {
newSchedule.add(habit.scheduledWeekDays[i]);
}
}
}
当用户按下“保存”按钮时,这些新值将应用于对象,否则,缓存信息将被丢弃。
上面的代码导致了以下问题:当我第一次将“习惯”对象加载到这个控制器中时,所有的值都按预期填充。
我第二次将“习惯”加载到此控制器时,它给了我“内存不足”异常。
我能够找到错误:
//habit.scheduledWeekDays has a maximum of 7 integers
for (var i = 0; i < habit.scheduledWeekDays.length; i++) {
newSchedule.add(habit.scheduledWeekDays[i]);
}
这个 for 循环将数据添加到一个已经有值的列表中。所以我第一次加载对象时,列表就被填满了。第二次,新数据被添加到顶部。
我可以用这个方法解决这个问题:
newSchedule.clear();
我现在在加载对象之前调用它。但它让我想知道:
当添加另一个最多 7 个整数时,作为一个列表,最多 7 个整数的小东西怎么会导致“内存不足”异常?
我错过了什么吗?