日期:2014-05-17  浏览次数:20892 次

List 的回收问题 求解
本帖最后由 assicen 于 2013-03-16 13:33:27 编辑

static List<MyObj> listObj = new List<MyObj>();
..............
void fun()
{
   MyObj myObj1=new MyObj();
   MyObj myObj2=new MyObj();
   listObj.Add(myObj1);
   listObj.Add(myObj2);
   listObj.Clear(); //注意这行
}


在listObj.Clear();后 myObj1 myObj2这两个对象会不会被释放
如果不执行listObj.Clear(); 那么myObj1 myObj2的存活周期是否和listObj一样?
如果执行了listObj[0]=null; 0对应的是myObj1 那么myObj1会不会被释放
谢谢

------解决方案--------------------
在listObj.Clear();后 myObj1 myObj2这两个对象会不会被释放   --如果没有其他引用,会释放
如果不执行listObj.Clear(); 那么myObj1 myObj2的存活周期是否和listObj一样?  ---一样,这里List是static的所以只有对这个变量显式赋值时才有可能释放
如果执行了listObj[0]=null; 0对应的是myObj1 那么myObj1会不会被释放   ---会,只要之后没有再使用变量myObj1
------解决方案--------------------
不会立即被释放,除非你自己写代码释放
垃圾回收会等一段时间判断你不用了才自动释放