It gets scary out there sometimes. During my freelance career I’ve worked a lot of different companies and have seen such coding horrors as you cannot imagine. So I thought I’d start immortalising some of them – so that we can all learn better coding practices, by looking at the bad.
Starter for 10 – What’s wrong with this picture?
public function set someProperty(value:String):void
var newPixels:BitmapData = new BitmapData(someUint, someUint, true, 0);
someBitmap.bitmapData = newPixels;
If it’s not immediately obvious, the fubar here is the potential replacement of a Bitmap’s BitmapData, without explictly disposing any existing BitmapData. I see this kind of thing quite often and it’s the source of many a memory leak. AVM2 isn’t that great and dealing with this kind of situation and there’s a crucial difference between GC cleaning up out-of-scope objects for you and things like BitmapData: GC will reclaim the memory associated with objects ‘when it feels like it’, whereas explicitly calling the ‘dispose’ method of a BitmapData will immediately give you back that memory. In the case of hardware accelerated setups, the memory associated with the pixel data itself (video memory) will be reclaimed immediately. You shouldn’t make more work for GC when you can avoid it – defensive programming is always best!