我看有的引擎代码里面 delete后并没有 设置null。
我开始和大多数人也有一样的疑问
1.delete后是必须null么?
2.不null是不是有特殊考虑,或者特殊应用?特别是在游戏引擎里面。
3.以下是我个人以前想法:
我觉得既然一个地方出发了删除,就应该NULL。别的地方要引用就应该是错误的。
但是flex貌似很多都是引用(浅拷贝)。也许我这里不需要了。但是别的地方还需要。
删除了是否会导致错误。
看了下面一个程序,就会有答案。如果分析得不够,还请大家指点:
所以,如果还在怀疑delete后是否需要null是对 delete 和 null了解混淆了。
先来看delete的定义:
------------------------------------------------
破坏由 reference 指定的对象属性;如果在运算完成后该属性不存在,结果为 true,否则结果为 false。如果对不存在的属性或类中未定义的动态属性调用 delete 运算符,则该运算符返回 true。
如果无法删除 reference 参数,delete 运算符可能失败并返回 false。不能删除用 var 语句声明的固定属性或变量。固定属性是类定义中的变量或方法。
除非类是运行时添加的动态类,否则不能使用 delete 运算符破坏该类的属性。不能使用 delete 破坏密封类的属性。而应当将该属性设置为 null。
注意:虽然无法删除对象,但可以通过删除对某个对象的所有引用来使该对象符合垃圾回收条件。对某个对象最常见的引用就是指向该对象的变量。可以通过将该变量设置为 null 来删除这样的引用。垃圾回收器会删除没有引用的所有对象。
-------------------------------------------------
所以delete破坏的是引用(reference)。我们null是对分配的空间标记为null(也就是上面的aa[0]、bb[0]),并非是bitmap本身。(当然删除bitmap :bitmap = null)
两个做了两件不同的事。
结论:破坏引用就delete(不需要的时候尽量这样做),然后在对需要回收的空间null.
希望大家多指教
博客[url]http://blog.youkuaiyun.com/wjxx23006191/[/url]
因为刚学flash喜欢转载文章后,对其分析,我博客里面也多数是这样的文章,以后希望会有更多自己的文章。