quick cocos2dx addEventListener坑

quick cocos2dx的addEventListener需要組件EventProtocol支持,這個組件提供了消息分發和消息捕捉機制
但是不能馬上在回調函數裏面進行消息分發,再在下一級中執行銷燬操作,否則會引發事故
代碼如下

obj:addEventListener('myEvent', function(event)
    self:dispatchEvent(event)
end)

subObj:onEvent(event) 
    self:destroy()
end

如果發生了這種情況,則程序會出現崩潰,原因是這個事件回調的時候對象本身還在而引起。
從調用過程來看 obj調用了subObj的onEvent函數,而在onEvent函數裏面對象就銷燬了,但是有可能還有下一條消息需要subObj對象來進行處理。
因此比較安全的做法是不要立即銷燬對象,需要執行一下詢問,看下現在是否安全了,如果是安全的,則進行銷燬,否則將啓動輪詢,直到安全以後再銷燬對象。

發佈了179 篇原創文章 · 獲贊 108 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章