Actionscript 3 AS3,FlashDevelop:布尔人。你是怎么做的?
我使用的是AS3和FlashDevelop,我似乎无法说服我的FlashPlayer/AVM使用它 我尝试了非常标准的选项:Actionscript 3 AS3,FlashDevelop:布尔人。你是怎么做的?,actionscript-3,garbage-collection,boolean,flashdevelop,Actionscript 3,Garbage Collection,Boolean,Flashdevelop,我使用的是AS3和FlashDevelop,我似乎无法说服我的FlashPlayer/AVM使用它 我尝试了非常标准的选项: myboolean = null; delete(myboolean); 但对于null,它表示“col:14警告:null用于预期的布尔值。” 和delete I get“col:11错误:尝试删除固定属性allDone。只能删除动态定义的属性。” 这是考虑到布尔值在方法中定义为: var myBoolean:Boolean = false; 我很感激,因为它在方法
myboolean = null;
delete(myboolean);
但对于null,它表示“col:14警告:null用于预期的布尔值。”
和delete I get“col:11错误:尝试删除固定属性allDone。只能删除动态定义的属性。”
这是考虑到布尔值在方法中定义为:
var myBoolean:Boolean = false;
我很感激,因为它在方法中,当这样的方法运行时,它当然会被垃圾收集,但我想确定一下,为什么我不能在同一类的另一个方法中对int、Array和Point进行相同的GC呢?布尔不也是一个对象吗
因此,如果有人知道如何GC布尔值,请告诉我。您在哪里使用布尔值?确保原语被GC’ed的唯一方法是确保它所使用的类被收集。基本上就像Jonatan Hedborg在这里说的那样,你不能直接控制垃圾收集的内容 我猜你来自c/c++或类似的背景,负责更严格、更直接地维护内存,而AS3和Java的情况并非如此;尽管内存管理仍然非常重要,但它更多地是在对象级别处理的。尽管Boolean从此处读取的对象扩展到了基本类型: Null数据类型Null数据类型仅包含一个值Null。这 是字符串数据类型和所包含的所有类的默认值 定义复杂的数据类型,包括对象类。没有一个 其他基本数据类型,如布尔、数字、int和uint, 包含空值。Flash Player和Adobe AIR将转换 如果尝试分配,则将值null设置为相应的默认值 布尔、数字、int或uint类型的变量为null。你不能 将此数据类型用作类型批注 在这两种情况下,您都有一些机制,例如清空引用,以从所有活动对象的图形中分离对象,这意味着它们将在垃圾收集器的下一次计划运行时被垃圾收集(这可能是强制的,但实际上并不推荐,在本例中,JVM或AVM的配置将根据其运行/执行的系统来处理它) 将对象置零将允许对其进行垃圾收集,但您不应该真正关心单个基元属性(我会留下一个摘要,但整个页面都很好,我认为垃圾收集的要点不一定是100%直接的,但只要付出一些努力就可以管理): 基本上,它的工作方式是FlashPlayer或运行(字节)代码的任何虚拟机都有一个已创建的所有对象的图形,并且有一个当前引用 根据环境(配置等),它还可以使用内存限制因此,GC设置了算法,以确定何时应该尝试垃圾收集。您应该主要关注将不再需要的对象的引用置零,如果您的应用程序不太复杂,或者您的硬件对RAM的限制不是很严格,那么这并不是什么大问题
因此,问题不应该是让GC运行得太少或太多,而是创建从未删除的引用(添加侦听器,而不是从应该收集的对象中删除,或者只是在不再需要它们之后在集合中对它们进行引用等)。上面的文章再次对这一点进行了更深入的解释。您的推理中有两个错误:
- “delete”只能应用于动态对象,不能应用于类成员或局部变量;在这些情况下,只需将成员/变量设置为null
- 值类型(布尔值、数字、字符串)不需要GC;在某些情况下,Flash将创建临时的“装箱对象”,这些对象将自动收集,因此您不必担心这些