Cocos Http回调时,对象已经释放怎么解决?

看了下3.4版本的HttpClient、HttpRequest的实现,目前回调支持两种写法:

老版本的写法:

CC_DEPRECATED_ATTRIBUTE inline void setResponseCallback(Ref* pTarget, SEL_HttpResponse pSelector)
{
_pTarget = pTarget;
_pSelector = pSelector;

if (_pTarget)
{
_pTarget->retain();
}
}

老版本中为了控制在异步请求回来前对象就释放,专门对目标进行了一次retain()操作,这就可以防止在请求回来前关闭掉页面,或是释放掉对象而引起的许多问题。

C++11的写法:
inline void setResponseCallback(const ccHttpRequestCallback& callback)
{
_pCallback = callback;
}

但是如果采用C++11的写法,callback只是一个std::function,设置了回调后,如果在异步请求回来前宿主已经释放了,再执行callback()就会报指针错误,不知道是我
的用法不对,还是这个问题确实被忽略了。求解答!

我用的新版没有报错啊

正常情况是不报错,你有没试过网络慢的时候,页面都关了,请求才回来的情况

碰到同样的问题,在设置网络限速的情况下就发生这个异常了,不知道有什么处理方法?

在http响应的回调函数里面直接发一个通知事件,然后另外一个页面内注册监听器,这个页面的析构函数里面释放监听器。这样即使页面关了也没事,意义就是把所有回调函数里面要做的事情放到监听器的函数里面去执行了