dispatchEvent

Roger Braunstein + Mims Wright = this blog


Tonight I wanted to check out some information about a video game so I turned to a site that both Roger and I worked on while at Schematic – Game Invasion. I think this site is great but I’m not here to toot my own horn. We built this with Flash 8 in under 2 months and it certainly isn’t technically perfect. However, even though this site is two years old and takes a while to load, I still really enjoy using it. I started wondering why.
The reason is simple – content (the graphic design is pretty good too). What makes this site great was not the work we did but the incredible amount of really high-quality content. There are HD videos, big crisp graphics and something new every time I visit. There are other sites that I’ve spent way more time making perfect that I’d never look at again since there’s nothing really worth seeing.
Another example is the NBC episode player. It’s buggy as hell and the ads are annoying. I much prefer the ABC player. However, I really like the show ‘Heroes’ so I pretty much forget about those things in the end.
What I’m trying to say here is that technical brilliance and good design are great but what will keep people coming back to your site is some really great content so if you’re making a website make that your focus.


Flex 3 public beta is out.

AIR public beta is out.

and while you’re at it…

Flash Lite 3

New Flash Player

and BlazeDS, whatever that is. (Hint: despite the name, this is not Flash CS3 for Gameboy)


For those of you not familiar with the concept, a weak-reference is a reference to an object that will not hold the linked object in memory when that object is garbage collected.

There are only two ways to create a weak reference in AS3. The first is with the IEventDispatcher.dispatchEvent() method which allows you to create a weak link between the dispatcher and the listener. To quote the AS3 Bible:

ActionScript 3.0 introduces the concept of weak and strong memory references. Normally, an object will be garbage collected if there are no references to the object. That is, when no objects are using a variable, it gets thrown out. Weak references allow you to reference an object but the object will still be eligible for garbage collection unless another object holds a strong reference to the object. By setting the [eventDispatch() method’s] useWeakReference flag to true, you will create a weak link between the event broadcaster and the event listener. That way, if an event listener is deleted while still listening to the event broadcaster, the weak reference will allow it to be garbage collected. This helps to prevent memory leaks.

The other way is with the objects used as keys in a Dictionary object.

ActionScript, unlike many other languages, does not have a way to explicitly remove an object from memory. Instead it waits until all references to an object are removed and then auto-deletes it. Therefore, an object will continue to stay in memory if all strong references aren’t removed.

Below is an example of how strong-references hold an object in memory. If you’d like to try this out, copy the below text into a file called StrongReferencesExample.as

[ftf]
package {
import flash.display.Sprite;

public class StrongReferencesExample extends Sprite
{
public function StrongReferencesExample()
{
// create a new object called dog. Add it to the first leash object
// and make leash2 a copy of leash 1.
var leash1:Object = new Dog();
var leash2:Object = leash1;

// tracing both leashes will show that they hold a reference to the Dog
trace(leash1); // [object Dog]
trace(leash2); // [object Dog]

// deleting the dog from the first leash will not remove it from the second leash
// even though we originally set leash2 equal to leash1
leash1 = null;
trace(leash1); // null
trace(leash2); // [object Dog]

// The object (dog) will not be free until all of the references to it (leashes) are broken.
leash2 = null;
trace(leash1); // null
trace(leash2); // null
}
}
}
// Define a simple Dog class within the same file.
class Dog {}

[/ftf]

Richard Lord over at Big Room Games has an interesting article on hacking AS3 to allow you to create weak-references to objects. The hack is pretty decent but lacks a few things I’d like to see like strong typing at compile-time or a more refined ‘memory manager’ type functionality. However, I tried implementing both of these and came up empty handed. If you can think of a way to make this strong-typed, I’ll give you a candy bar.

Using the WeakReference hack could be useful if you want to make sure that an object will not stay in memory if you forget to delete all references to it. However, keeping track of your objects and practicing good memory management is a much better solution and hacks like this one should be saved for special cases where tracking use of an object becomes difficult or impractical.

Thanks to Alex for the link!

« Previous PageNext Page »