【问题标题】:flash as3 define variables before or in class constructor?flash as3 在类构造函数之前或中定义变量?
【发布时间】:2012-01-20 22:36:06
【问题描述】:

类似的东西有什么区别

package {
    public class Myclass {
        var txt:TextField = new Textfield();

        function Myclass() {

        }

    }

}

package {

    public class Myclass {

        var txt:TextField;

        function MyClass() {

            txt = new TextField;
        }
    }
}

我知道当你设置创建一个新对象时,类的构造函数就会运行,像这样:

var object:Myclass= new Myclass();

在第二种方式中,这将创建新的 TextField。

我的困惑是,在第一种方式中,何时创建 TextField?如果我将类导入另一个类,它会为 TextField 留出内存吗?如果它是一个静态变量呢?

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    在您实例化之前不会分配内存,因此在这方面它并不重要。

    如果您使用静态变量,该变量将占用内存,因为它未绑定到实例化对象,而是类似于该类中的全局变量。

    编辑:pkyeck 对如何最好地构造和初始化 cmets 中的对象进行了很好的说明: 在构造函数内的 AS3 代码中应该很慢 - 所以最好创建一个 init() 方法并在那里进行实例化,并且只在构造函数内执行所有 init()。即时编译器 (JIT) 未优化构造函数内的代码。要使用 JIT 优化代码,可以从构造函数中调用函数。然后再次优化该函数内的代码。取自这里:je2050.joa-ebert.com/files/misc/as3opt.pdf – pkyeck

    【讨论】:

    • 另外,将它们设为私有或公共(或静态)变量。
    • 是的,甚至是受保护的。一般来说,变量应该尽可能私有,并且应该尽可能使用 getter 和 setter 来获取/设置值。
    • 为什么在构造函数中实例化被认为是好的做法?在 C# 中,使用字段初始化被认为是一种很好的做法(使用 ctor 重载,优点很明显)。在 C++ 中,使用初始化列表也被认为是一种很好的做法,因此这些字段只初始化一次(否则它们会在 ctor 运行之前被初始化为其默认值)。
    • 实际上我并不完全确定。这是我多年前从 lynda.com 和 gotoAndLearn() 视频学习 AS3 时学到的东西。从那以后,我在我的大学学习了计算机科学领域的 Java,他们还声称这是一种很好的做法。我不知道 C++ 和 C# 有什么不同。如果我可以推测它会使代码更简洁,至少在我看来。您将声明与定义分开,并为构造函数中的字段赋值,这是创建对象的机制。在我看来,它在语义上似乎更正确,但我想它可能因人而异。
    • 在构造函数内的 AS3 代码中应该很慢 - 所以最好创建一个 init() 方法并在那里进行实例化,并且只在构造函数内执行所有 init()Code inside the constructor is not optimized by the Just-in-time compiler (JIT). To use JIT optimized code there is the possibility to call a function out of the constructor. The code inside that function is then optimized again. 取自这里:je2050.joa-ebert.com/files/misc/as3opt.pdf
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多