Re: [問題] addEventListener 隱含function的寫法

看板Flash作者 (CJ Cat)時間13年前 (2011/05/25 08:34), 編輯推噓7(707)
留言14則, 8人參與, 最新討論串2/3 (看更多)
※ 引述《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

05/25 08:38, , 1F
真正漂亮的code是過了兩個星期你還看得懂的code(無誤
05/25 08:38, 1F

05/25 08:41, , 2F
推不重複,改用布林傳值讓同一funcion作出很多種事
05/25 08:41, 2F

05/25 08:42, , 3F
也是一個好方法
05/25 08:42, 3F

05/25 09:25, , 4F
哈,pm說的也對 :)
05/25 09:25, 4F

05/25 09:25, , 5F
我有同學程式超強,參加過一堆比賽,但是他的變數名稱
05/25 09:25, 5F

05/25 09:26, , 6F
從來不超過3個character,而且從來不寫注解
05/25 09:26, 6F

05/25 09:26, , 7F
連他都兩天候就看不懂自己寫的code了
05/25 09:26, 7F

05/25 09:26, , 8F
因為他已經習慣比賽的模式,一次就把程式寫完這樣
05/25 09:26, 8F

05/25 09:27, , 9F
然後還有出現一行有7、8個"++"的指標運算,超難懂
05/25 09:27, 9F

05/25 12:30, , 10F
推這篇
05/25 12:30, 10F

05/25 12:46, , 11F
感謝這篇
05/25 12:46, 11F

05/25 13:32, , 12F
想要做到沒有重複程式碼 是一件辛苦事
05/25 13:32, 12F

05/26 22:46, , 13F
這篇真的解釋得不錯~ 感謝
05/26 22:46, 13F

05/27 06:06, , 14F
奔放的code或許適合一次創作 但不適合用來工作
05/27 06:06, 14F
文章代碼(AID): #1Dt4wQwe (Flash)
文章代碼(AID): #1Dt4wQwe (Flash)