Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3,FlashDevelop:布尔人。你是怎么做的?_Actionscript 3_Garbage Collection_Boolean_Flashdevelop - Fatal编程技术网

Actionscript 3 AS3,FlashDevelop:布尔人。你是怎么做的?

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; 我很感激,因为它在方法

我使用的是AS3和FlashDevelop,我似乎无法说服我的FlashPlayer/AVM使用它

我尝试了非常标准的选项:

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将创建临时的“装箱对象”,这些对象将自动收集,因此您不必担心这些

它位于继承类的公共方法中。抱歉,让我在主要问题中指定一些内容…哈哈,令人惊讶的是,shaun AS3可能是我第一次正确的编码体验,我猜是我的背景。我只是担心所有变量都会不必要地导致GC运行,而不是我只是将它们置空。我已经检查过了我在这里和其他地方都读了一些文章,我并不打算强制使用GC,但我希望有人知道如何使用GC布尔,因为似乎没有人知道!完全没有必要担心一个布尔值,如果你正在制作一千个这样的对象,你应该只关心管理大量更大的对象类,而不是担心太多的原语。我知道我可能担心得太多了,但我可以为所有其他变量引用设置空值,这似乎很奇怪,但是布尔值会给我带来一个错误-而且不止一个,prob 50-100。Tbf代码无论如何都需要平滑处理,但我很高兴确认我不应该太担心关于这件事,塔肖恩:)