可以列表 并且它的项目在一个表格的生命周期中创建并返回到另一个类,在它被破坏后存活下来?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以列表 并且它的项目在一个表格的生命周期中创建并返回到另一个类,在它被破坏后存活下来?相关的知识,希望对你有一定的参考价值。

我有一个Windows窗体A和Windows窗体B.

A创建B并将其显示为模态(对话框)。

用户在B上做一些工作,B触发A监听然后关闭的事件(DialogResult = DialogResult.OK;)

在事件过程中,List作为参数返回给监听A,A应该在其生命周期中使用它。

List的范围及其指向的对象是“B类私有”。

我的问题是:

  1. List<x>在处置(关闭)B后会存活吗?
  2. 如果它会存活多久,在什么条件下? (比如直到GB启动等)
  3. 将控制对象中的变量传递给另一个控制对象时,如何在销毁控件对象后处理该变量?
  4. 当你将一个变量传递给另一个控件时,我们是否应该获得一个副本以确保它不会随着控制的破坏而飞走?
  5. 如果指向对象的指针仍在使用中,GB是否仍然会破坏其范围丢失后的对象?
答案

不要混淆变量的可见范围和对象的生命周期。如果存在对该对象的活动引用,则它确实存在,即使原始变量不再在范围内也是如此。创建对象或谁拥有引用并不重要。

对于你来说,这意味着,如果你对一个对象有一个(非空)引用,那么该对象总是存活的;但是,如果它是一次性物体,其状态可能不再有效。例如,当已经处理了连接(connection.Dispose();)时,对象仍然存在并且可以检查其状态,但是连接变得不可用。

垃圾收集器(GC)首先标记所有可到达的对象,然后它扫描堆以查看是否存在未标记的对象,即不再被活动引用作为目标的对象,并清除它们。实际上,这个过程比较复杂,但你会得到一般的想法。

在这里,您可以阅读有关Fundamentals of Garbage Collection的更多信息。

  1. 是。
  2. 只要有一个参考,它至少会存活。
  3. 如果另一个对象有引用它,则不会发生任何事情。
  4. 没有。
  5. 没有。

换句话说,别担心。 GC使其工作良好,并且不会破坏您仍在使用的对象。

以上是关于可以列表 并且它的项目在一个表格的生命周期中创建并返回到另一个类,在它被破坏后存活下来?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个数组并开始它的生命周期而不开始它的任何元素的生命周期?

UITableViewCell 在视图生命周期中何时创建它的出口/标签/子视图?

如何使用ij编写Servlet的生命周期?

在Flask中,g是什么?它的生命周期是?能做什么?

vue生命周期

Android Fragment生命周期及静态加载