当前位置: 首页 > 知识库问答 >
问题:

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

燕英奕
2023-03-14

在循环函数中,例如CustomPaint()paint(),如果我以这种方式创建对象:


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

在每一帧调用paint()时,是否会重新创建此对象,或者是否会缓存它,直到它所依赖的内容(例如屏幕大小)发生更改?

共有1个答案

岳英锐
2023-03-14

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

  • MyClass标准构造函数——然后每次调用对象时都会重新创建它
  • MyClass可以有const构造函数。然后,如果使用const MyClass()创建实例,它将是同一个实例。因此,这并不总是可能的
  • MyClass可以有默认的工厂构造函数。通过这种方式,您可以根据自己的需求在MyClass内部实现“缓存”。例如“singleton”——您将始终拥有单个实例。请看这里的例子:如何在Dart中构建单例

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

 类似资料:
  • 问题内容: 我不确定这个问题是否与语言无关,因此我将以Java问题的身份提出。如果你有这样的循环 循环的每次迭代都在创建新的内存空间吗?如果是这样,是否要处理旧空间?如果没有,做这样的事情更有效吗 编辑:更新了代码以更好地说明问题 问题答案: 简短的答案:即使在Java中进行开发时,也不要理会这些事情,即使这些问题中的大多数都是由JVM自己处理的。 垃圾收集器将知道该怎么做,并将根据情况尝试做最好

  • 我使用Dagger创建活动特定对象图。在这个子图中,我使用了一个Singleton。 当我退出活动并再次进入活动时,我的期望是创建活动特定对象图的新实例,这反过来会创建Singleton的新实例(凭借每个匕首的@Singleton语义。有关详细信息,请参见此答案),该实例将持续到活动特定对象图的生命周期。 然而,这不是我观察到的,每次创建特定于活动的对象图时,都会使用相同的实例。我在的构造函数中添

  • 问题内容: 我正在尝试在循环内创建函数: 问题在于所有功能最终都相同。这三个函数都没有返回0、1和2,而是返回2: 为什么会发生这种情况,我应该怎么做才能获得分别输出0、1和2的3个不同函数? 问题答案: 你在后期绑定方面遇到了问题-每个函数都i尽可能晚地查找(因此,在循环结束后调用时,i将设置为2)。 可以通过强制早期绑定轻松修复:更改为以下形式: 缺省值(右手i输入i=i是参数名的默认值,i左

  • 我对编程有点陌生,我被卡住了。假设我在一个项目中有五个不同的类:foo1、foo2、foo3、foo4和foo5,它们都做不同但相似的事情。现在假设我需要为每个对象创建一个新对象,比如:foo1 bar1=new foo1();foo2 bar2=新的foo2();foo3 bar3=新的foo3();等等当然这是可行的,但如果我能在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所

  • 问题内容: 我有一个JpaRepository在Spring MVC应用程序中持久保存新创建的实体。这个实体看起来像这样(非常简化): 和版本实体: 我创建一个这样的翻译对象 其中11是从一开始就已经存在于数据库中的版本。请注意,我没有为ClientVersionDTO 设置和的值。 然后,我有一个持久化新对象的服务(我使用库将DTO转换为实体) 请注意我的评论“ t2.getVersion()返

  • 问题内容: 例如: 相对于: 一个比另一个更有效吗? 问题答案: 返回之前分配给临时变量使您有机会从newPerson()中进行错误检查和更正。返回新的调用要求newPerson()方法的调用者捕获错误并从错误中恢复。