[問題] 移除函式內監聽器的問題

看板Flash作者時間11年前 (2013/12/11 11:04), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串1/1
大家好,最近在做監聽管理的時候,遇到了一個問題。概要如下 private function testListener(create:Boolean):void { //temp is a Container if (create) { temp.addEventListener('testEvent',test_listener); } else { temp.removeEventListener('testEvent',test_listener); } function test_listener(event:Event):void { trace('Hello'); } } 這樣的一個method 簡單處理事件的監聽與移除 然而看完可能就有大大發現了,這個監聽是不會被移除掉的! 我有google了一下大概原因, 主要應該是test_listener這個method在我監聽和移除時,flash對應的記憶體位置是不同 所以無法正確移除,最簡單的處理方式,可以將test_listener移至testListener外部 private function test_listener(event:Event):void { trace('Hello'); } 如此可正常移除,但是這種method除了testListener需要之外,根本沒有用途。 想請問各位這種情形,有何方法可以處理函式中的監聽器,或是有其他觀念上的選擇? 謝謝大家~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.248.193 ※ 編輯: hurst05 來自: 59.120.248.193 (12/11 11:05)

12/11 15:32, , 1F
記憶體什麼的....簡單的說因為test_listener放在
12/11 15:32, 1F

12/11 15:32, , 2F
testListener裡面所以每次創的都是一個分身function
12/11 15:32, 2F

12/11 15:33, , 3F
拉到外面是為了跟testListener隔開並且統一化
12/11 15:33, 3F

12/11 15:34, , 4F
就算只有一兩個用途但是只要能共通,寫成function不會
12/11 15:34, 4F

12/11 15:34, , 5F
是什麼壞事,你也可以全部指定到一個function作swith
12/11 15:34, 5F

12/11 15:35, , 6F
讓那個function趨向萬能化,不能說你寫出來的function
12/11 15:35, 6F

12/11 15:35, , 7F
沒用途啊= =,沒用途幹嘛監聽,如果只有一個地方用得
12/11 15:35, 7F

12/11 15:36, , 8F
到,不如直接拆進去就好了?
12/11 15:36, 8F

12/12 09:27, , 9F
感謝,我思考看看~
12/12 09:27, 9F
文章代碼(AID): #1IfzOhuo (Flash)
文章代碼(AID): #1IfzOhuo (Flash)