My spam filter needs to be re-tuned to get rid of the {disarmed}.  I'm going to 
resend this so it gets on the thread vs. starting a new one.  My apologies for 
this.
-----



That helps a little; thanks.

 

Based on how you are describing the instances, my issue may be with the 
debugger and variable scope within the debugger.

 

I'm talking about my instances instead of flex instances in my example.  I'm 
trying to figure out how code is initialized to understand where I should 
separate code into its own class.

 

My first piece of code is a login routine that authenticates against a remote 
object (coldfusion).

 

I've got the class structured like this:

 

Login.mxml

|

|---loginform.mxml

|

|---registrationform.mxml

|

|---forgotpassword.mxml

 

The login.mxml class states call each of the other form.mxml files under it.  
Are these initialized when the state changes to include that class?  Or are 
they created when the application initialized?  Then also, are the instances 
destroyed or are they persistent (data still lives in them) when the login.mxml 
class changes states say from registrationform to loginform?

 

Thanks much!

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Gordon 
Smith
Sent: Monday, July 28, 2008 3:34 PM
To: [email protected]
Subject: {Disarmed} RE: [flexcoders] mxml components

 

> all classes are created when the application is started

 

AS3 classes get initialized -- meaning that their static variables get set and 
their static methods get executed -- in a lazy fashion, as they are used. If 
you have bytecode for a class in your SWF and that class doesn't get used by 
other code, that class will never get initialized.

 

On the other hand, *instances* of DisplayObject classes get created "top down" 
when you use MXML. The Player automatically creates an instance of 
SystemManager. The instance of SystemManager automatically creates an instance 
of MainClass as its child. The instance of MainClass creates Class2 as its 
child. Etc. MXML, with its tags nested inside other tags, is essentially 
shorthand. For example,

 

    <Button id="b" label="OK"/>

 

is basically shorthand for

 

    public var b:Button;

    ...

    // inside some method:

    b = new Button();

    b.label = "OK";

    addChild(b);

 

It sounds like you might want to experiment with dynamically creating class 
instances of DisplayObjects like this with 'new' -- and attaching them to 
parents with addChild() and detatching them with removeChild() -- in order to 
have more of a correspondence with what you're familiar with, namely C++. It 
might be that the MXML syntax, which hides the instantiation details, is 
confusing you.

 

> In C++ I would initialize the classes I wanted to use by using calling the 
> class initializer().

 

I think you mean that you would create the instances you wanted by using the 
'new' operator, which invokes the class's constructor.

 

> if I needed to access a private variable from MainClass.mxml I included the 
> header file (in this case the class4.mxml file)

 

There are no header files in AS3. Instead of 'include'ing a header file, you 
import a class. But if something is private you can't access it from any other 
class.

 

> Also in C++ when I'm done with the instance I needed to call the destructor 
> to shut the class down and free the memory

> I haven't seen a reference yet to destroy a class instances in Flex/AS3

 

A C++ destructor doesn't shut a class down; it gets called when an *instance* 
is freed with the 'delete' operator. You don't have to delete instances in AS3 
because they get "garbage collected". Periodically the runtime determines 
whether there are any references to an instance. If not, it frees it. There is 
no method similar to a destructor that gets called when this happens.

 

> I've gotten confused on how long those class instances live and when exactly 
> they are initialized. 

 

In the case you're describing, they live until you quit the app. If you did 
something like use removeChild() to detach the instance of Class3 from the 
instance of Class2, then the instances of Class3 and Class4 would become 
subject to garbage collection. (Which doesn't necessarily ensure that they'll 
actually get garbage collected unless the Player decides it is running low on 
memory.) They were initialized by methods of framework core classes, such as 
Container and SystemManager, in the top-down order that I previously described.

> When I use the debugger it doesn't look like in the above example that 
> class4.mxml stays active if I leave the Class3.mxml code.

I'm not clear on  what you're seeing, but it sounds like you're misinterpreting 
it.

Gordon Smith
Adobe Flex SDK Team

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Scott
Sent: Saturday, July 26, 2008 4:16 PM
To: [email protected]
Subject: RE: [flexcoders] mxml components

 

I was afraid of that...

 

Ok, let's see if I can do it better.

 

I understand that I'm not "calling" a class, but functions within the instance.

 

So if I understand the other message from Gordon correctly then all classes are 
created when the application is started.  However, it doesn't look like that in 
the debugger when I'm running the application.

 

Let's take and expand my question example below...

 

MainClass.mxml

|

|-----Class2.mxml  - ShowStat():Boolean

|

|-----Class3.mxml  -  LoggedIn():Boolean

|        |--Class4.mxml - LogMeIn(strName:String,strPassword:String)

                               |-- private var bIsLoggedOn:Boolean

 

(This is fictitious for point of discussion)

 

If I control the display and how things are laid out in MainClass.mxml, I used 
the Class2 and Class3.mxml files as subclasses to control the widgets on the 
screen being placed by the MainClass.mxml.

 

In C++ I would initialize the classes I wanted to use by using calling the 
class initializer(). (I have been using the creationComplete="init()" to start 
code in the class instance.) Then if I needed to access a private variable from 
MainClass.mxml I included the header file (in this case the class4.mxml file) 
and called the function, in the above example LoggedIn():Boolean.  Also in C++ 
when I'm done with the instance I needed to call the destructor to shut the 
class down and free the memory.  I haven't seen a reference yet to destroy a 
class instances in Flex/AS3.

 

While using the individual "class".mxml files I've been created, I've gotten 
confused on how long those class instances live and when exactly they are 
initialized.  And how do I "destroy" the class instances and the variables they 
contain to free memory (is this necessary in Flex/AS3)?  When I use the 
debugger it doesn't look like in the above example that class4.mxml stays 
active if I leave the Class3.mxml code.

 

Finally, if I had a reason to log the user in from another area in the code; 
say from MainClass.mxml, if I wanted to call LogMeIn( myusername, mypassword) 
from Class4.mxml I can't tell if I'm creating a new instance of that class or 
am I using the existing instance?  In other words...:

 

 

Are these the same instance or unique instances with in each of the class 
instances themselves (mainclass/class3)?

 

MainClass.mxml:

 

<mx:script>

 <![CDATA{

            Import com.myapp.models.LoginClass;

...

..

 

And

 

Class3.mxml

<mx:script>

 <![CDATA{

            Import com.myapp.models.LoginClass;

...

..

 

 

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Tracy 
Spratt
Sent: Friday, July 25, 2008 5:07 PM
To: [email protected]
Subject: {Disarmed} RE: [flexcoders] mxml components

 

First, there are "classes" and "instances".  When it matters, use these terms 
correctly.

 

Second, "call" does not apply to a "class", or even really an "instance". 

 

An instantiated class stays instantiated untill all references to it are 
removed, and "Garbage Collection" has run and removed it.

 

If this is not the answer, perhaps you can rephrase your question, without 
using the word "call"? 

 

Tracy

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Scott
Sent: Friday, July 25, 2008 5:59 PM
To: [email protected]
Subject: [flexcoders] mxml components

 

Ok, I'm trying to get a firm grasp on AS3 components/classes.  I'm trying to 
figure out how to structure code so I can optimize code re-use.

 

What is the life of a component/class in a flex application?

 

In other words...

 

If I have a main.mxml that calls another class like logins.mxml, is that class 
in existence only while it's called?  Once the event hits to call it back is 
the class still alive?  It looks like it kills it from memory but I'm not 100% 
sure.

 

Take the following examples...

 

MainClass.mxml

|

|--------subclass1.mxml

|

|--------subclass2.mxml

|     |----subclass2a.mxml

 

 

If MailClass.mxml calls subclass1.mxml, completes and then calls subclass2.mxml 
which calls subclass2a.mxml, what are the lives of these classes?

 

Also, do I need to be worrying about cleanup or is that handled automatically?

 

I hope I'm explaining this well....


-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 


-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 

 

-- 
This message has been scanned for viruses and 
dangerous content by MailScanner <http://www.mailscanner.info/> , and is 
believed to be clean. 

Reply via email to