文档章节

网络异常分析CFURLConnectionSendSynchronousRequest

Gerry1218
 Gerry1218
发布于 2016/05/27 15:53
字数 595
阅读 95
收藏 0

官方翻译:

异常调用栈 

Thread 0:
0   libSystem.B.dylib 0x00001668 mach_msg_trap + 20
1   libSystem.B.dylib 0x00003734 mach_msg + 44
2   CoreFoundation    0x0002296e CFRunLoopRunSpecific + 1150
3   CoreFoundation    0x000224da CFRunLoopRunInMode + 42
4   CFNetwork         0x0002b118 CFURLConnectionSendSynchronousRequest + 244
5   Foundation        0x000a45a2 +[NSURLConnection sendSynchronousRequest:returningResponse[…]
6   MyBadApp          0x000063f6 0x1000 + 21494
7   MyBadApp          0x0000630a 0x1000 + 21258
8   MyBadApp          0x00006ada 0x1000 + 23258
9   MyBadApp          0x00003618 0x1000 + 9752
10  MyBadApp          0x0000351e 0x1000 + 9502
11  MyBadApp          0x00003874 0x1000 + 10356
12  UIKit             0x00068568 -[UIViewController viewWillMoveToWindow:] + 76
13  UIKit             0x0000988a -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:] + 126
14  UIKit             0x00005e6e -[UIView(Internal) _addSubview:positioned:relativeTo:] + 222
15  UIKit             0x00005d80 -[UIView(Hierarchy) addSubview:] + 16
16  MyBadApp          0x000028d2 0x1000 + 6354
17  UIKit             0x00003e58 -[UIApplication _performInitializationWithURL:payload:] + 336
18  UIKit             0x00003b22 -[UIApplication _runWithURL:payload:launchOrientation:] + 394
19  UIKit             0x0004f8c4 -[UIApplication handleEvent:withNewEvent:] + 1336
20  UIKit             0x0004f242 -[UIApplication sendEvent:] + 38
21  UIKit             0x0004ec8c _UIApplicationHandleEvent + 4772
22  GraphicsServices  0x00003b2c PurpleEventCallback + 660
23  CoreFoundation    0x00022d96 CFRunLoopRunSpecific + 2214
24  CoreFoundation    0x000224da CFRunLoopRunInMode + 42
25  UIKit             0x0000340a -[UIApplication _run] + 342
26  UIKit             0x00001954 UIApplicationMain + 636
27  MyBadApp          0x00002828 0x1000 + 6184
28  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 查询。

 

 

官方翻译

© 著作权归作者所有

Gerry1218

Gerry1218

粉丝 9
博文 81
码字总数 15130
作品 1
杭州
程序员
私信 提问
基于fiddler插件开发的移动测试网络监控与分析

一、背景和目的: 由于目前App前端业务测试很少关注后端网络接口的异常情况,客户端QA在项目测试时往往局限于关注测试功能,导致测试粒度较粗。即使按照CheckList过功能点,客户端QA对后端接...

百度MTC
2015/12/18
115
0
剖析Volley请求多次的原理

网络线程NetWorkDispather 的run 方法里有一行代码:NetworkResponse networkResponse = mNetwork.performRequest(request);意思开始请求服务端,直到返回响应,进performRequest方法看看: ...

指尖上的开源
2015/08/19
4.9K
0
摩卡流量分析管理(Mocha NTA)解决方案

方案概述   现今,互联网应用业务已经从单一化向多元化发展,从只能进行新闻浏览、mail传递等单一网络应用逐渐过渡到了以下载、在线视频、网络游戏等为主的多元化网络应用,而且随着相关技...

赖永锋
2018/06/26
0
0
AI 在安全领域到底有哪些“不水”的实践?|权威报告

雷锋网注:以下内容摘自中国信通院发布的《中国网络安全产业白皮书(2019 年)》。 人工智能技术在数据分析、知识提取、智能决策等方面的优势为应对动态多变、复杂交织网络安全问题提供了新思路...

李勤
10/04
0
0
阿里UC百亿PV的前端监控平台:(4)大数据分析

本文首发于知乎 《阿里UC百亿级PV的前端监控平台实践》 ,搬运转载请注明出处,否则追究版权责任。 阿里UC百亿PV的前端监控平台实践 系列文章: 阿里UC百亿PV的前端监控平台:(1)概述 阿里U...

杂货铺老板
10/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Win10如何修改入站规则

桌面->网络 右击 -> 属性 -> 防火墙 点击 高级设置 右击入站规则 -> 新建规则 根据端口设置入站规则

恒宝乐园
6分钟前
5
0
在PPT中将照片变裸眼3D效果怎样操作?分享操作技巧,帮你快速实现

PPT的使用相信大家都不陌生,使用最多的就是制作PPT对工作进行汇报,对新项目进行展开讨论。其实在PPT中还可以设计海报,制作高逼格封面以及将照片变为3D效果等偏设计类的操作。今天将以如何...

百因必有果
16分钟前
5
0
苹果的M4A音频格式怎么转换成FLAC

最新版的苹果手机iPhone 11其完美的系统和华丽的外观真是让人想“剁手”。不过使用过苹果手机或者iPad等移动设备的朋友可能知道,其音乐文件为M4A音频格式。而这种文件格式最初是在iTunes以及...

软件分享达人
17分钟前
10
0
提现设置

提现设置 用户如何提现? 1.打开后台-设置-交易设置-提现设置 最低提现金额:提现金额将不小于此值才能提现 最小提现单元:每次以最小提现单元金额的整数倍提现 提现提示信息:商家可填写提示...

Geek-Chic
39分钟前
3
0
php的redis.so扩展安装【PHP】

一、资源准备,下载 不仅是redis.so,安装其他拓展的方式也类似 第一种方式: 下载:wget https://github.com/phpredis/phpredis/archive/develop.zip 解压:unzip develop.zip 进入目录:c...

一代码农码一代
39分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部