quick cocos2dx的addEventListener需要組件EventProtocol支持,這個組件提供了消息分發和消息捕捉機制
但是不能馬上在回調函數裏面進行消息分發,再在下一級中執行銷燬操作,否則會引發事故
代碼如下
obj:addEventListener('myEvent', function(event)
self:dispatchEvent(event)
end)
subObj:onEvent(event)
self:destroy()
end
如果發生了這種情況,則程序會出現崩潰,原因是這個事件回調的時候對象本身還在而引起。
從調用過程來看 obj調用了subObj的onEvent函數,而在onEvent函數裏面對象就銷燬了,但是有可能還有下一條消息需要subObj對象來進行處理。
因此比較安全的做法是不要立即銷燬對象,需要執行一下詢問,看下現在是否安全了,如果是安全的,則進行銷燬,否則將啓動輪詢,直到安全以後再銷燬對象。