Как заставить Dart / Flutter повторно использовать тот же класс с теми же свойствами - PullRequest
0 голосов
/ 07 ноября 2019

Мой вопрос довольно прост, у меня есть класс Dart, такой как

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

class Weather extends Equatable {
  final String cityName;
  final double tempCelsius;
  final double tempFahrneit;

  const Weather({
    @required this.cityName,
    @required this.tempCelsius,
    this.tempFahrneit,
  });

  @override
  List<Object> get props => [
        cityName,
        tempCelsius,
        tempFahrneit,
      ];
  @override
  String toString() {
    return [
      cityName,
      tempCelsius,
      tempFahrneit,
    ].toString();
  }
}

Я использую Equatable, чтобы упростить сравнение объектов, я также использовал ключевое слово const в конструкторе класса (не уверен в этом, я слышал, что когда он используется в конструкторе класса, он делает Dart первым, если у него тот же класс с теми же свойствами, прежде чем его создавать).

Когда я смотрю на DevTools, я всегда получаю несколькоэкземпляры классов при вызове функции, хотя она всегда имеет одинаковые параметры, и сборщик мусора сохраняет ее событие, хотя я открываю / уничтожаю представление (Scaffold в контексте Flutter).

Сейчас я просто тестирую его смаленький класс, но это будет беспорядок, если это один большой класс, хотя я думаю, что в этом случае сборщик мусора наверняка избавится от неиспользуемых классов, но я хочу знать, смогу ли я решить эту «проблему» скакие-то пути Дарт / Флаттер.

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы создаете свои объекты с const Weather(...), вы больше не должны видеть несколько экземпляров.

Наблюдение за сборщиком мусора, как правило, не очень хорошая идея, вы можете верить, что он уничтожит ваши объекты, когда алгоритм GC доберется до него.

Сборщик мусора Дарт оптимизирован для создания множества небольших объектови выбрасывать их вместе. Таким образом, вы, вероятно, не должны беспокоиться об этом вообще.

...