作者cjcat2266 (CJ Cat)
看板Flash
标题Re: [问题] addEventListener 隐含function的写法
时间Wed May 25 08:34:31 2011
※ 引述《hirabbitt (兔子)》之铭言:
: addEventListener(事件, new function(E:事件):viod{
: //要做的事
: });
这种写法会遇到的事情
就是如果没有保留function的reference
未来就无法remove event listener
於是这个Function物件就会成为记忆体上面的orphan
以至於需要释放记忆体的时候,GC不会将其清除
另外,enterFrame和timer这种clock性质的事件
会持续触发这个function直到程式结束,因为你没有保存reference
所以用这种写法的时候,最好保存refernece
var f:Function;
addEventListener(Event.ENTER_FRAME, f = function(e:event):void {
trace("test");
}
未来才有办法将其移除,让GC可以释放记忆体
removeEventListener(Event.ENTER_FRAME, f);
还有这种写法最好不要写在回圈里面
因为每一次回圈都会制造一个新物件
最好就是使用你说的第二种方法
把一样的功能写在同一个function里面
我认为真正漂亮的code是没有code duplication和object duplication
也就是没有重复功能的程式码和物件
而不是越简短的code越漂亮
--
Blog
http://blog.cjcat.net
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.231.103.162
1F:推 pm2001:真正漂亮的code是过了两个星期你还看得懂的code(无误 05/25 08:38
2F:推 AizawaYuichi:推不重复,改用布林传值让同一funcion作出很多种事 05/25 08:41
3F:→ AizawaYuichi:也是一个好方法 05/25 08:42
4F:→ cjcat2266:哈,pm说的也对 :) 05/25 09:25
5F:→ cjcat2266:我有同学程式超强,参加过一堆比赛,但是他的变数名称 05/25 09:25
6F:→ cjcat2266:从来不超过3个character,而且从来不写注解 05/25 09:26
7F:→ cjcat2266:连他都两天候就看不懂自己写的code了 05/25 09:26
8F:→ cjcat2266:因为他已经习惯比赛的模式,一次就把程式写完这样 05/25 09:26
9F:→ cjcat2266:然後还有出现一行有7、8个"++"的指标运算,超难懂 05/25 09:27
10F:推 emily114005:推这篇 05/25 12:30
11F:推 hirabbitt:感谢这篇 05/25 12:46
12F:推 etrexetrex:想要做到没有重复程式码 是一件辛苦事 05/25 13:32
13F:推 StranGhost:这篇真的解释得不错~ 感谢 05/26 22:46
14F:推 scars:奔放的code或许适合一次创作 但不适合用来工作 05/27 06:06