看了下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()就会报指针错误,不知道是我
的用法不对,还是这个问题确实被忽略了。求解答!