弱引用的偵聽器是否必須被刪除才能發生垃圾收集?即使它們被弱引用,或者我們可以指望垃圾收集器恰當地處理它們,是不是很好的做法?AS3:弱引用必須被刪除?
回答
您不必手動刪除弱聽者,以便對垃圾進行垃圾回收。不註銷監聽器會導致大部分內存泄漏,所以使用弱監聽器可以顯着提高程序的穩定性。
但是,爲了防止在準備好之前刪除弱聽者,必須至少有一個強引用(或使用實例方法)。這通常意味着無論註冊偵聽器需要保留它,直到父類的引用已被刪除。只要實例擁有組件最常見的偵聽器,就會使偵聽器持續下去。
有些情況下您必須管理監聽器,那就是如果您計劃不聽父母的整個生活。可能的情況下,你想刪除偵聽器,然後在稍後添加它,不常見,但它發生。這就是弱聽者對強大的參考聽衆沒有任何優勢。
垃圾收集器將刪除微弱的偵聽器,一旦強引用刪除。弱聽者使清理更簡單。雖然人們很謹慎,但我相信你會聽到,因爲弱聽者對於UI框架來說相當新穎。當GC被添加到主流語言時,大多數人也對此過於謹慎。
我們依靠GC來清理內存,這可以工作並且使代碼更加穩定,而且現在人們不會調用那些草率的代碼。弱聽者沒有什麼不同。
我從來沒有使用弱引用,但我非常小心地刪除所有聽衆,當我不再需要它們時。我認爲最好養成一種習慣,總是要去掉聽衆而不是使用弱引用。
事件偵聽器中的弱引用選項主要是爲了讓您 不必手動刪除事件偵聽器。我個人傾向於 不使用它,因爲我喜歡完全控制對象獲取 標記爲垃圾回收。
Clarifications regarding weak references in actionscript listeners
http://gingerbinger.com/2010/07/actionscript-3-0-events-the-myth-of-useweakreference/
這正是弱引用聽衆的點 - 你不嚴格需要將它們刪除了垃圾收集發生。
但是,這個功能不應該被濫用作爲一種手段來編寫草率的代碼。只有在自己無法正確清理的情況下,才應該依靠它們。如果你可以預測你什麼時候會完成一個事件的監聽,那麼你應該使用一個強引用的事件監聽器,並在完成後將其刪除。
- 1. C++必須刪除一個引用?
- 2. 實體必須設法調用刪除
- 3. Mysql外鍵,必須在引用表或鍵中匹配刪除?
- 4. as3 array按索引刪除
- 5. 我是否必須刪除此對象? (如果我不打算被刪除)
- 6. 刪除as3中的movieclip引用
- 7. Flash AS3錯誤:增量的1106操作數必須是引用
- 8. 是否必須單獨刪除外鍵/索引,如果你打算刪除表
- 9. mysql 5.1分區 - 我必須刪除索引/鍵元素嗎?
- 10. 我必須刪除@Override註釋嗎?
- 11. 記憶新的INT [10]必須刪除[]
- 12. 計時器必須保持刪除
- 13. 我們是否必須刪除QUpdSockets?
- 14. 我必須刪除這些指針嗎?
- 15. 我必須通過jQuery刪除父div
- 16. 必須刪除意向演員嗎?
- 17. FLASH/AS3:刪除孩子時出錯。參數子項必須爲非零
- 18. as3兒童不會被刪除
- 19. AS3 POST返回值'+'已被刪除
- 20. 如果元素被刪除,我是否必須清除DOM中的事件?
- 21. 用指針刪除列表也是必須清除的對象
- 22. 刪除子AS3
- 23. MySQL - 必須被捕獲或被宣佈引發
- 24. 參數孩子必須在AS3
- 25. AS3:參數子項必須爲非空
- 26. AS3 stage.addChild/stage.removeChild <<必須呼叫者
- 27. 如何從列表中刪除弱引用?
- 28. MySqlDataReader將必須被關閉
- 29. 由getExternalCacheDir()創建的文件被自動刪除或應用程序必須明確刪除
- 30. Lua弱引用
使用強引用偵聽器的好處是什麼?我在某處讀到最好總是使用弱引用:[link](http://gskinner.com/blog/archives/2006/07/as3_weakly_refe.html) – Abdulla