AFNetworking启动时isReachable返回false问题

当我们在appDelegate's didFinishLaunching使用AFNetworkReachabilityManager的startMonitoring后,然后立即使用isReachable会发现总会得到false值。有时候我们会在网络请求的封装中加入isReachable状态来判断是否可以进行网络请求,这就导致了在didFinishLaunching中初始化的类进行的网络请求总是失败。

造成这种情况的原因是:

在startMonitoring 后调用isReachable并不能立刻获得正确的结果,需要一点时间才能得到正确的结果,因为isReachable依赖于Apple API SCNetworkReachabilityGetFlags,而这是一个同步任务(猜测在执行ping操作),所以AFN在后台异步队列中回调了它,从而导致不能立刻获得结果。

解决上述问题方式有两种:

第一个是忽略isReachable的判断,直接去进行网络请求。据说苹果推荐的就是首先去尝试网络请求,当网络请求失败的时候再去检查isReachable

第二个是设置网络连接状态改变的回调setReachabilityStatusChangeBlock,在该回调里判断isReachable或进行其他操作。

你可能感兴趣的:(AFNetworking启动时isReachable返回false问题)