如何强制 Dart/Flutter 重复使用具有相同属性的相同 class
How to force Dart/Flutter to reuse same class with same properties
我的问题很简单,我有一个像这样的 Dart class
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 来简化对象比较,我还在 class 构造函数上使用了 const
关键字(不确定这一点我听说过在 class constructor 如果 Dart 在实例化它之前具有相同的 class 和相同的属性,它会让 Dart 首先查找。
当我查看 DevTools 时,我总是在调用一个函数时得到多个 class 实例,尽管它总是相同的参数,垃圾收集器保持它事件,尽管我弹出/销毁视图(脚手架在 Flutter 上下文中)。
现在我只是用一个小的 class 来测试它,但是如果它是一个大的 class,这将是一团糟,尽管我认为在这种情况下是垃圾收集器肯定会处理未使用的 classes,但我想知道我是否可以通过某种 Dart/Flutter 方式解决此 "problem"。
如果您使用 const Weather(...)
创建对象,您应该不会再看到多个实例。
监视垃圾收集器通常不是一个好主意,您可以相信它会在 GC 算法到达时销毁您的对象。
Dart 的垃圾收集器针对创建许多小对象并将它们一起丢弃进行了优化。所以你可能根本不必担心这个。
我的问题很简单,我有一个像这样的 Dart class
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 来简化对象比较,我还在 class 构造函数上使用了 const
关键字(不确定这一点我听说过在 class constructor 如果 Dart 在实例化它之前具有相同的 class 和相同的属性,它会让 Dart 首先查找。
当我查看 DevTools 时,我总是在调用一个函数时得到多个 class 实例,尽管它总是相同的参数,垃圾收集器保持它事件,尽管我弹出/销毁视图(脚手架在 Flutter 上下文中)。
现在我只是用一个小的 class 来测试它,但是如果它是一个大的 class,这将是一团糟,尽管我认为在这种情况下是垃圾收集器肯定会处理未使用的 classes,但我想知道我是否可以通过某种 Dart/Flutter 方式解决此 "problem"。
如果您使用 const Weather(...)
创建对象,您应该不会再看到多个实例。
监视垃圾收集器通常不是一个好主意,您可以相信它会在 GC 算法到达时销毁您的对象。
Dart 的垃圾收集器针对创建许多小对象并将它们一起丢弃进行了优化。所以你可能根本不必担心这个。