dart:在循环函数中创建的对象会被缓存还是重新创建?

Posted

技术标签:

【中文标题】dart:在循环函数中创建的对象会被缓存还是重新创建?【英文标题】:dart: Will objects created in a recurring function be cached or recreated? 【发布时间】:2020-11-16 11:54:37 【问题描述】:

CustomPaint()paint()等循环函数中,如果我这样创建对象:


void paint(Canvas canvas, Size size) 
    
  ....
  
  var myObj = MyClass();
  var myObj.configure(canvas, size);
 
  ....
    


在每帧调用paint() 时是否会重新创建此对象 或者它会被缓存直到它依赖的东西,比如屏幕尺寸改变?

【问题讨论】:

【参考方案1】:

这取决于你如何实现 MyClass 构造函数。我可以看到几个选项:

MyClass 标准构造函数 - 每次调用时都会重新创建对象; MyClass 可以有 const 构造函数。然后,如果您使用const MyClass() 创建实例,它将是同一个实例。因此,并非总是可以这样做。 MyClass 可以有默认的工厂构造函数。这样,您可以根据您的要求在 MyClass 本身内部实现“缓存”。示例是“单例” - 您将始终拥有单个实例。例如,请参见此处:How do you build a Singleton in Dart?

还请注意,如果 MyClass 的对象是轻量级的,则可能不需要优化:Dart 通常擅长创建大量小对象并进行垃圾收集。

【讨论】:

以上是关于dart:在循环函数中创建的对象会被缓存还是重新创建?的主要内容,如果未能解决你的问题,请参考以下文章

如何调用在另一个函数中创建的对象

你如何调用在javascript中的数组中创建的对象的函数?

为啥你不能命名一个在函数中创建的对象,与它在 Python 中的类名完全相同?

如何使在 ddply 中创建的对象在函数外部可用(在全局环境中)?

使用不同的构造函数重新分配对象

删除在 DLL 中创建的对象