AFNetworking启动时isReachable返回false问题

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

造成这种情况的原因是:

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容