Tag Archive: ActionScript


总结2011

年终总结风潮已经过去,我赶了个晚。但好歹在春节来临之前把自己安定下来,好好回顾一下这一年。

在此之前,我又好好读了一遍自己写的2010总结。感叹是计划不如变化,但好歹今年没有浪费时间,还是做了一点事的。

上半年大部分时间还是在上海过着深居简出的日子,一边做些小活一边学习iOS开发。期间发了一些博文,把之前积累的一些AS经验都整理了出来。这种状态一直持续到回厦门之前。我在朋友介绍下接了一个上海车展用的急活。在高强度的十几天里把一个iOS项目做完,让我又回到刚毕业时候的打鸡血状态。这个项目的完成让我消除了对iOS开发的恐惧感,并且开始享受掌握另一种面向对象语言所带来的冲击和融合。还好因为去年深入研究AS打下的基础,让我产生了一些融汇贯通的美妙感受。所以接下来我慢慢的把更多的注意力投入到这个方面。回想去年订下的HTML5为主、Objective-C为辅的计划,不禁觉得好笑。事实刚好相反,一切还是以机缘为导向。我想HTML5更多的还是大公司或者牛人的玩具,而iOS开发正是很多人赖以吃饭的技术,至少短期内如此。

下半年除开接了一个Flash开发的项目花了两三个月工作时间,其余时间都泡在Xcode里面。iOS5发布了,新的api随之而来,还有WWDC的各种技术视频,Apple这个创新的公司一点也没让开发者们闲着。再有些空余时间我就继续关注Flash平台的各种口水战。我对Adobe的3D游戏导向的相关技术没太大兴趣,对webgl和canvas绘图的各种实验性作品仍然处于仰慕的阶段。我也很喜欢这些“玩具”,可惜暂时无缘吧。

最后两个月前终于把各个freelance项目都结束了,于是有心思开始折腾自己的东西。和朋友合作了一款天气类的创意app,经过了漫长的设计和开发过程,现在也提交了第一版。这算是给自己做产品的尝试开了一个头,明年还会继续再这上面投入精力。

一直想着要正式跨过freelance,向前迈前一步。终于在2012到来的第一天,把工作室的地儿给定下来。地址选在小资到爆的中山公园一带,与众多文艺青年为伍。名字么就叫Sumi(取我名字的谐音)。明年的基调就定好是在这里奋斗着奔三。我对工作室的想法是做互动,要做慢、做精。做得像厦门的乌糖沙茶面那么跩,就开半天,卖完了关门。在这里也邀请同道中人共襄盛举:),外地的还是本地都没有关系,我向往的是依托于网络协作平台建立的轻公司模式。

在自我管理上,今年丢了两个好习惯:一个是写晨间日记,一个是记账。都因为环境变动的原因没有坚持下来,在2012要重新恢复。5月份买了iPad以来,获取信息的方式有了很大的变化。现在基本上阅读新闻和RSS都会在iPad上,因此连去看FWA的时间都减少了。根据工作和兴趣不断调整工作方式一直是我长期笃信的原则。经过大半年的调整期,终于在新年前把新的学习系统建立起来。希望2012会是更有效率的一年。

噢,其实前面说了这么多事儿都是我今年的副产品。2011年最大的项目成果是11月16日老婆帮我生的一个胖女娃:名叫曹语荞。希望她能快乐健康的成长。

最后祝各位龙年大吉,龙腾虎跃,龙马精神!继续关注Kevin Cao和Sumi^_^

前文我们介绍了GC的工作机制和帮助GC更好工作的最佳实践。其实只要我们遵守谁创建谁清理的原则来管理对象,就能基本上避免回收失败,也就是我们通常说的内存泄漏问题。但是在实际项目中我们还会看到各种原因引起的内存泄漏,接下来就让我们一起来找出病因。

首先我们需要观察症状,也就是内存的使用曲线。排查的方法是反复执行一些创建和删除对象的方法、反复加载和卸载子文件。如果内存曲线一路飙升、或者是居高不下,都表明发生了内存泄漏问题。观察内存占用可以直接求助于操作系统的资源管理器,也可以用Hi-ReS-Stats这个类。

第二个需要观察的地方,是Player输出的load和unload信息。加载和卸载外部文件,是内存泄漏问题的重灾区。在调试阶段,我一般会在主文件加一个执行System.gc()语句的按钮。一旦卸载了一个子文件,就手动触发若干次GC。如果没有输出子文件的卸载信息,那么就说明出现泄漏了。 View full article »

在《给AS程序员的一点建议一文》中我提到了释放资源的重要性。最近在一些项目过程中我又对这方面有了更多的理解,在此希望能够分享给大家。首先让我们来回顾一下关于垃圾回收(Garbage Collection,下文简称GC)的一些知识。要阅读本文,你需要对GC机制有些基本认识。

在ActionScript中,我们没有API可以直接删除一个对象,也不能控制Player进行GC。但是GC的行为是可以预估的,作为开发者,我们需要了解的是GC执行的时机是发生在需要向操作系统请求分配内存的时候。

从上面的模拟图我们可以看到:

  • Player以块的方式请求和释放内存。GC的结果不一定就是更少的内存占用,也有可能是从操作系统获得更多的可用内存。
  • Player会在某些GC过程中把内存中未使用部分组合成可以释放的块还给操作系统。
  • 此外还要注意的是Player为了避免占用太多的CPU资源,会将一些GC操作分到不同的时间片中运行,所以一次GC过程并不一定清理完所有可回收资源。

一次GC过程(GC Pass)分为以下两个步骤: View full article »

Powered by KevinCao.com ©2010 | Platform: WordPress | Theme: Motion
kevincao.com