博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络异常分析CFURLConnectionSendSynchronousRequest
阅读量:6119 次
发布时间:2019-06-21

本文共 2886 字,大约阅读时间需要 9 分钟。

hot3.png

官方翻译:

异常调用栈 

Thread 0:0   libSystem.B.dylib 0x00001668 mach_msg_trap + 201   libSystem.B.dylib 0x00003734 mach_msg + 442   CoreFoundation    0x0002296e CFRunLoopRunSpecific + 11503   CoreFoundation    0x000224da CFRunLoopRunInMode + 424   CFNetwork         0x0002b118 CFURLConnectionSendSynchronousRequest + 2445   Foundation        0x000a45a2 +[NSURLConnection sendSynchronousRequest:returningResponse[…]6   MyBadApp          0x000063f6 0x1000 + 214947   MyBadApp          0x0000630a 0x1000 + 212588   MyBadApp          0x00006ada 0x1000 + 232589   MyBadApp          0x00003618 0x1000 + 975210  MyBadApp          0x0000351e 0x1000 + 950211  MyBadApp          0x00003874 0x1000 + 1035612  UIKit             0x00068568 -[UIViewController viewWillMoveToWindow:] + 7613  UIKit             0x0000988a -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:] + 12614  UIKit             0x00005e6e -[UIView(Internal) _addSubview:positioned:relativeTo:] + 22215  UIKit             0x00005d80 -[UIView(Hierarchy) addSubview:] + 1616  MyBadApp          0x000028d2 0x1000 + 635417  UIKit             0x00003e58 -[UIApplication _performInitializationWithURL:payload:] + 33618  UIKit             0x00003b22 -[UIApplication _runWithURL:payload:launchOrientation:] + 39419  UIKit             0x0004f8c4 -[UIApplication handleEvent:withNewEvent:] + 133620  UIKit             0x0004f242 -[UIApplication sendEvent:] + 3821  UIKit             0x0004ec8c _UIApplicationHandleEvent + 477222  GraphicsServices  0x00003b2c PurpleEventCallback + 66023  CoreFoundation    0x00022d96 CFRunLoopRunSpecific + 221424  CoreFoundation    0x000224da CFRunLoopRunInMode + 4225  UIKit             0x0000340a -[UIApplication _run] + 34226  UIKit             0x00001954 UIApplicationMain + 63627  MyBadApp          0x00002828 0x1000 + 618428  MyBadApp          0x000027f8 0x1000 + 6136

看看栈的5、6行,你能看到应用程序正在使用同步网络调用 (+[NSURLConnection sendSynchronousRequest:returningResponse:error:]) 已经被阻塞并等待网络,thereby invoking the ire of the watchdog.

一旦你确认了这个问题和你的网络代码相关,通常有两种解决方案:

  • 异步网络 - 解决这个问题最好的方法就是异步运行你的网络代码,异步网络代码有很多优点,不只是让你安全的访问网络,不用担心线程。
  • 在第二线程同步网络操作 - 如果异步运行网络代码非常困难(假如你使用了大量基于同步网络的可移植代码,你能避开watchdog,在第二线程上执行同步代码)。

需要认识到隐藏在抽象层后面的同步网络操作掩盖了一个危险。

如果你用"http"或"https"URL方式调用 -[NSXMLParser -initWithContentsOfURL:],NSXMLParser会同步下载这个URL的内容。这是非常方便的,但是如果你在主线程运行它,有被看门口watchdog杀掉的风险。一个更好的选择就是异步下载URL的内容到wenjian,然后使用''file"URL调用-[NSXMLParser -initWithContentsOfURL:] 方法。这同样适用于其他"WithContentsOfURL",像+[NSString stringWithContentsOfURL:encoding:error:], -[NSDictionary initWithContentsOfURL:]等等。

reachability — The System Configuration framework reachability API (<SystemConfiguration/SCNetworkReachability.h>) 默认是同步操作。因此像SCNetworkReachabilityGetFlags这种看起来没有问题的API可能使你被watchdog杀死。如果你使用了reachability API,你应该异步调用。这涉及到在run loop上使用 SCNetworkReachabilityScheduleWithRunLoop 方法去执行你的reachability 查询。

 

 

转载于:https://my.oschina.net/petsatan/blog/682891

你可能感兴趣的文章
网易跟贴这么火,背后的某个力量不可忽视
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>