我们为什么要使用dispose()方法?我对此有点困惑。如果我们不使用它会出现什么问题,使用它有什么好处?
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
Run Code Online (Sandbox Code Playgroud)
Vir*_*iya 29
dispose方法用于在移除状态对象时释放分配给变量的内存。
例如,如果您在应用程序中使用流,则必须释放分配给 streamController 的内存。否则,您的应用可能会从 Playstore 和 Appstore 收到有关内存泄漏的警告。
主要目的是获得一个回调,您可以在其中释放所有资源。
如果您已初始化状态中的任何资源,则在处理该状态时关闭或销毁该资源非常重要。
例如:如果您在 initState 中创建流StatefullWidget,那么在dispose该状态的方法中关闭该流很重要,否则会导致内存泄漏。
欲了解更多详细信息,您可以参考以下意见这是我从源代码得到dispose的方法StatefulWidget:
当此对象从树中永久移除时调用。当此 [State] 对象永远不会再次构建时,框架会调用此方法。框架调用[dispose]后,[State]对象被认为是unmounted,[mounted]属性为false。此时调用 [setState] 是错误的。生命周期的这个阶段是终端:没有办法重新挂载已经被释放的 [State] 对象。子类应覆盖此方法以释放此对象保留的任何资源(例如,停止任何活动动画)。{@macro flutter.widgets.subscriptions} 如果您覆盖它,请确保以调用 super.dispose() 结束您的方法。另请参阅:* [deactivate],在 [dispose] 之前调用。
或者你可以参考文档:https : //api.flutter.dev/flutter/widgets/State/dispose.html
所以基本上 dispose 在当前状态不会被再次使用时被调用。因此,如果您有任何处于该状态的活动侦听器,那么它们可能会导致内存泄漏,因此您应该关闭它们。
dispose() 如果未定义,则从有状态自动调用方法。
在某些情况下处置需要例如CameraPreview,Timer等等。你必须关闭流。
当需要关闭流时,您必须在 dispose 方法中使用它。
dispose()用于在释放屏幕时执行代码。相当于onDestroy()安卓的。
例子:
@override
void dispose() {
cameraController?.dispose();
timer.cancel();
super.dispose();
}
Run Code Online (Sandbox Code Playgroud)
嗯,答案就在“处置”这个词中。想象一下你在一个聚会上,有一张桌子,上面放着水杯,这些水杯是塑料杯。现在您将得到一个玻璃杯,使用它并处理(将其扔进垃圾箱)。如果你不这样做,你将同一个玻璃杯放在桌子上,那么就没有地方可以放置其他新玻璃杯(内存错误)。因为现在桌子已经满了。第二件事是,如果你把一个玻璃杯放在桌子上,可能会剩下一些饮料。所以如果其他人使用那个玻璃杯,那么里面已经有东西了。(如果您不在同一屏幕上处理相同的表单或动画控制器,则控制器已经具有一些价值)。
快乐的场景:-所有人都拿起饮料杯并将它们扔进垃圾箱,这样所有桌子也会有空间,每个人都会得到新饮料,而不是某人的旧饮料。
实用的地方我了解了准确的用法-我制作了一个需要内联编辑的屏幕,这意味着您单击按钮将所有文本转换为文本表单字段,然后更改所需的值,然后再次按该按钮提交(相同的图标更改)编辑按钮),
因此,“处置”一词暴露了有关其使用的所有信息,我希望这个现实生活中的示例能有所帮助。谢谢
void dispose() {
super.dispose();
_editButtonAnimationController.dispose();
_ageController.dispose();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
当该对象从树中永久删除时,将调用 dispose() 方法。
更多信息可以参考官方文档:https ://api.flutter.dev/flutter/widgets/State/dispose.html
实施例:
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
Run Code Online (Sandbox Code Playgroud)
一般来说,dispose意味着在相关对象从焦点中移除之前释放资源。我所说的焦点,是指从widget tree或navigation stack相关的。
当您在 a 上调用 dispose 时widget state,关联的小部件应该是unmounted,这意味着该小部件永远不会重建。
当该对象从树中永久删除时调用。
当此 State 对象不再构建时,框架会调用此方法。
框架调用 dispose 后,State 对象被认为已卸载,mounted 属性为 false。此时调用setState是错误的。
生命周期的这个阶段是终结阶段:无法重新挂载已释放的 State 对象。
当您对 a 调用 dispose 时bloc,该块应该关闭eventandstate流。
更新: New Bloc 没有dispose,而是有close。
所以,这dispose基本上就是这个意思。
TL;DR 一般来说,这意味着释放关联实例/对象所持有的资源。
然而,的具体含义dispose随着调用该方法的对象的类型而变化。
| 归档时间: |
|
| 查看次数: |
30242 次 |
| 最近记录: |