这个“内存不足”错误怎么会发生?

时间:2021-04-22 16:39:46

标签: flutter dart

昨天,我遇到了内存泄漏,我不明白为什么。

我使用 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 个整数的小东西怎么会导致“内存不足”异常?

我错过了什么吗?

0 个答案:

没有答案