作者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
推 pm2001:真正漂亮的code是過了兩個星期你還看得懂的code(無誤 05/25 08:38
推 AizawaYuichi:推不重複,改用布林傳值讓同一funcion作出很多種事 05/25 08:41
→ AizawaYuichi:也是一個好方法 05/25 08:42
→ cjcat2266:哈,pm說的也對 :) 05/25 09:25
→ cjcat2266:我有同學程式超強,參加過一堆比賽,但是他的變數名稱 05/25 09:25
→ cjcat2266:從來不超過3個character,而且從來不寫注解 05/25 09:26
→ cjcat2266:連他都兩天候就看不懂自己寫的code了 05/25 09:26
→ cjcat2266:因為他已經習慣比賽的模式,一次就把程式寫完這樣 05/25 09:26
→ cjcat2266:然後還有出現一行有7、8個"++"的指標運算,超難懂 05/25 09:27
推 emily114005:推這篇 05/25 12:30
推 hirabbitt:感謝這篇 05/25 12:46
推 etrexetrex:想要做到沒有重複程式碼 是一件辛苦事 05/25 13:32
推 StranGhost:這篇真的解釋得不錯~ 感謝 05/26 22:46
推 scars:奔放的code或許適合一次創作 但不適合用來工作 05/27 06:06