从7月初离职,回家休养,直到9月初才出来找工作,万幸工作很好找。已经入职新的公司,学习再次开始。
之前做过一个有关Loader的测试,当时测试的结果是无论如何Loader加载进来的东西移出不了内存,直接导致内存逐步增长。有个项目曾经因为这个原因甚至采取了as3+as2的模式。近期开始熟悉CS4,看到有新的方法 unloadAndStop 。于是再度开始新的测试。
结果发现之所以移出不干净完全是因为代码的问题:
之前一直认为直接将 loader addChild到别的地方这种行为会导致紧耦合,习惯建立一个DisplayObject来进行中转,一直没认为这部分会出现问题,在CS3中运行也是良好的。但是将其放到CS4中会发现报告出了一个错误:“ArgumentError: Error #2180: 如果 AVM1 内容(AS1 或 AS2)已加载到 AVM2 (AS3) 内容中,则不可将其移动到 displayList 的其他部分。”于是将代码改成:
这样就发现不仅在CS4中 在CS3中同样能达到释放内存的效果。
归根结底,ADOBE其实认为正规的做法是将loader直接作为displayObject进行addChild即可,通过建立中转的方式会导致这部分长驻内存,除非关闭FLASHPLAYER否则释放不了。