只是想知道使用
是否有任何好处 private static const
而不是
private const
?
如果您只有一个类或多个实例,这会改变吗?
我怀疑如果你有多个类的实例,可能在使用static
时会有一些小的内存/性能优势。
答案 0 :(得分:7)
正如mmsmatt指出的那样,他们节省了一些记忆。通常这不是节省内存的最佳位置。您应该更担心内存泄漏,一般关于有效的文件格式和数据表示。
静态常量的缺点是所有全局访问都比本地访问慢。 instance.ident
优于Class.ident
。运行此代码进行测试:
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.*;
public class Benchmark extends Sprite {
private static const delta:int = 0;
private const delta:int = 0;
private var output:TextField;
public function Benchmark() {
setTimeout(doBenchmark, 1000);
this.makeOutput();
}
private function doBenchmark():void {
var i:int, start:int, sum:int, inst:int, cls:int;
start = getTimer();
sum = 0;
for (i = 0; i < 100000000; i++) sum += this.delta;
out("instance:", inst = getTimer() - start);
start = getTimer();
sum = 0;
for (i = 0; i < 100000000; i++) sum += Benchmark.delta;
out("class:", cls = getTimer() - start);
out("instance is", cls/inst, "times faster");
}
private function out(...args):void {
this.output.appendText(args.join(" ") + "\n");
}
private function makeOutput():void {
this.addChild(this.output = new TextField());
this.output.width = stage.stageWidth;
this.output.height = stage.stageHeight;
this.output.multiline = this.output.wordWrap = true;
this.output.background = true;
}
}
}
答案 1 :(得分:6)
private static const
个成员。
private const
个成员每个实例存储一次。
所以是的,你节省了一些记忆。
答案 2 :(得分:0)
这取决于具体情况。
如上所述,静态将是每种类型一次,非静态将是每个实例一次,因此它取决于您将拥有多少个实例。
我之所以这么说是因为如果你有一个组件只能一次实例化一次(比如一个提示弹出窗口)并且你之后从内存中完全处理它,那么就意味着你要使用不必要的内存作为静态因为它永远不会消失那个静态变量。 如果你有多个实例(比如粒子或多个窗口),那么最好使用静态因为它们将共享相同的变量。