现在的游戏都会联网, http有时候是会有延迟的, 我们目前是在回调方法里传入了一个node指针,这个node就是http请求结束后根据返回的数据修改ui显示的对象, 但是有时候http很长时间才返回,用户会因为等待的不耐烦而把ui关闭, 这个传入的node指针就空了.于是报错. 我们目前的做法是在http请求过程中给界面蒙上遮罩禁止玩家操作. 这显然不是最好的处理办法,有什么办法处理这个问题, 这个问题的核心是处理http回调的线程和处理ui node界面的线程不是一个造成的数据冲突问题,cocos有没有什么办法是可以通知ui主线程让它去完成修改ui node操作的,而不像现在这样直接在http回调线程中操作
tolua.isNull(self)
你不要将网络回调和UI线程耦合得这么紧,问题就解决了。例如,你可以在通过自定义事件在接收到网络通知时进行回调。
在发起网络请求send后加个retain,在回调处release,这样可以避免node被释放。
ps:send后调用HttpClient::getInstance()->destroyInstance();好像没用,回调函数依然会执行
如何使用自定义事件,求解释,谢谢
— Begin quote from ____
引用第3楼小九天于2015-10-25 11:04发表的 :
在发起网络请求send后加个retain,在回调处release,这样可以避免node被释放。
ps:send后调用HttpClient::getInstance()->destroyInstance();好像没用,回调函数依然会执行 http://www.cocoachina.com/bbs/job.php?action=topost&tid=328895&pid=1417735
— End quote
我们现在用的就是这方法,但是不合理,我们希望的是一个界面被销毁的时候他上面的所有资源都被回收,手动retain违背了这一点
你定义一个自定义事件,在load到网络回调的时候,发送这个自定义消息,在事件内附带上你的数据。
需要监听这个网络回调的对象在构造的时候添加一个针对这个自定义事件的监听器,析构的时候移除这个监听器。
这样如果load到网络回调的时候,这个对象如果已经被销毁了,自然就不会触发这个监听器了,就不会出错了。
这样明白了吗?
— Begin quote from ____
引用第6楼vincent_jie于2015-10-28 14:46发表的 回 4楼(abcbuzhiming) 的帖子 :
你定义一个自定义事件,在load到网络回调的时候,发送这个自定义消息,在事件内附带上你的数据。
需要监听这个网络回调的对象在构造的时候添加一个针对这个自定义事件的监听器,析构的时候移除这个监听器。
这样如果load到网络回调的时候,这个对象如果已经被销毁了,自然就不会触发这个监听器了,就不会出错了。
这样明白了吗? http://www.cocoachina.com/bbs/job.php?action=topost&tid=328895&pid=1421089
— End quote
测试成功,谢谢了
学习了