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
------解决方案--------------------不会立即被释放,除非你自己写代码释放
垃圾回收会等一段时间判断你不用了才自动释放