【发布时间】:2015-11-05 07:38:28
【问题描述】:
我试图了解对象何时被回收。例如,在一个类中,我有一个 List 声明和这个类中的一个方法,通过声明和初始化一个临时对象然后将该对象添加到列表中来填充列表。
我的困惑:由于临时对象是在方法体中声明的,当方法返回时这些对象不会被回收,因此保存对它们的引用的列表现在失去了对象的值?在方法完成后,我的代码仍然保持对象值(并且可能引用完整)。
public class CameraTest
{
private List <Camera> cameraList;
public CameraTest()
{
AddCamera();
}
private void AddCamera()
{
Camera tempCamera = new Camera();
tempCamera.Name="Camera1";
cameraList.Add(tempCamera);
}
//Why would cameraList still have the "Camera1" object here?
}
【问题讨论】:
-
如果您包含可以实际编译的代码,您的问题会更好。
-
首先,您将变量
cameraList创建为类的全局变量。 -
只要你有一个 CameraTest 实例并且你找到了一个更好的地方来调用 AddCamera - 即在构造函数中,这些对象仍然存在。
-
只有在引用计数为0时才会发生垃圾回收
-
简而言之,只要 somebody 有对它的引用,一个对象就存在并继续存在(从技术上讲,它在被 GC 处理之前仍然存在)。变量
tempCamera不存在于AddCamera方法之外,但是您分配给它然后添加到您的cameraList的对象确实存在,因为cameraList具有对它的引用。
标签: c# object reference recycle