使用MethodSwizzle导致按home app进入后台或者app间切换发生crash的解决方法
参考文章:
1、http://blog.csdn.net/alincexiaohao/article/details/45913857
2、http://www.cocoachina.com/ios/20160226/15324.html
今天在测试项目的支付宝支付功能时,在调用支付宝客服端后出现了crash(心中一万只草泥马)。如下图

看到这个libobjc.A.dylib`objc_release,至少知道原因了对象被释放了。于是乎百度了下libobjc.A.dylib是干嘛用的。知道了libobjc.A.dylib包含了runtime的东东。想起来之前用MethodSwizzle 实现对数组、字典 等系统方法的安全校验。测试了下发现确实是这个引起的。
知道了是MethodSwizzle引起的问题,同时还要找到是哪个对象被释放了。好在前一天在cocoachina看到了这篇《EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理》。那么好说先定位到底是哪个对象。
僵尸调试步骤:
1、以下方法适用于Xcode的6和7,单击顶部菜单栏的Product-Scheme-Edit Scheme,并选中Edit Scheme。
2、在左侧选中Run ,在上方打开 Diagnostics选项。要启用僵尸对象,勾选 Enable Zombie Objects选框。

开启僵尸调试后终于打印出被释放的对象了

哦!原来是键盘的问题。于是参考《iOS [UIKeyboardLayoutStar release]: message sent to deallocated》 这篇文章,就是把用到MethodSwizzle的那个类改成MRC模式,我的项目是ARC,同时修改MethodSwizzle方法的实现顺利解决问题。
步骤如下:
1、点击项目导航文件--> 选中Targets--> 选择 Build Phases --> 展开Compile Sources 找到

双击该行文件,在右边弹出框输入 -fno-objc-arc

2、修改实现方法

使用MethodSwizzle导致按home app进入后台或者app间切换发生crash的解决方法的更多相关文章
- DEDE后台登录和前台验证码不显示的解决方法
DEDE后台登录和前台验证码不显示的解决方法,网络上现在有好几种方法,某些时候还是有用的.说说自己今天遇到的一个情况,跟其他不一样的原因和解决方法: 方法一 1.用ftp把网站根目录下的DATA文件 ...
- 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法
从今年10月份开始wordpress服务经常出现429 too many requests错误,包括后台更新和访问wp官网,如下图所示,这是为什么呢?怎么处理呢?有大佬向官方论坛提问了,论坛主持人Ja ...
- 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
前段时间开发了一款微信小程序,运行了也几个月了,在index.js中的onLoad生命周期里获取app.js中onLaunch生命周期中在接口里动态设置的globalData一直没有问题,结果昨天就获 ...
- Ecshop 后台导出订单Excel时, 内存溢出的解决方法
今天继续跟大家分享一下,在我配置Ecshop时的问题. 今天的问题是在后台想要导出订单列表Excel时出现的内存溢出.错误提示如下 问题: Fatal error: Allowed memory s ...
- JS给文本框赋值后,在页面后台取不到文本框值的解决方法
转自:http://www.cnblogs.com/qiaohd/archive/2012/03/23/2413660.html (ReadOnly.disabled 都有可能造成取值取不到) 开发一 ...
- phpcms后台栏目权限修改无效的原因和解决方法
现象:在phpcms后台中,新建角色,然后修改角色对应栏目权限,结果一直只能选择一半数量的栏目.剩下的栏目怎么修改都不生效. 对比: step1:再另一个phpcms后台做同样操作,依旧是这个结果.跟 ...
- 关于换了手机后,导致原来连的fiddler抓不到新手机上的包的解决方法
原来我们测试都是一台安卓机,一台ios机,由于机子不够,所以安卓机都是自己的手机,可以连内网,也可以连外网 但是最近这几天,不知道公司抽了什么风.把网都给限制了,只有公司的测试机,才能连内网测,结果我 ...
- Angular4中使用后台去数据,Swiper不能滑动的解决方法(一)
Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,很受很多设计师的欢迎. 今天在使用Swiper的时候遇到这个问题: 使用angularjs动态循环生成swiper-slide ...
- 因为曾经装过Mysql导致再次装时windows无法启动MySQL服务报错1067的解决方法
找到这里 MySQL右击属性 检查这里的可执行文件的路径是否正确,因为我这里显示的是原先的文件夹所以会一直启动失败,修改一下 这里你去百度经验 windows服务修改可执行文件路径 网址https:/ ...
随机推荐
- MongoDB 学习一
这一章,我们先介绍几个MongoDB的概念: 1.document: 它是MongoDB的基础数据单元,它大概等价于关系型数据库中的行. 2.collection: 可以想象成动态的表. 3.一个简单 ...
- 美化你的APP——从Toolbar開始
Toolbar是什么 Toolbar是Google在Android 5.0中推出的一款替代ActionBar的View.ActionBar必须得作为Activity内容的一部分,而Toolbar能够放 ...
- Multi-lingual Support
Multi-lingual Support One problem with dealing with non-Latin characters programmatically is that, f ...
- contentprovider基础
程序启动后,只要再manifest当中注册上,就会执行PersonProvider()创建一个对象
- html5--3.5 input元素(4)
html5--3.5 input元素(4) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...
- easyui-tabs 在ie8下基于iframe嵌套页面加载成功后切换空白问题
这是一个很坑的问题,由于项目必须支持ie8的情况下,产生了这个问题.在我进行逐步对比的分析过后,终于发现了原因所在:
- bootstrap学习大纲
bootstrap 学习分三部分,分别是 css样式,css组件,js插件. 下面介绍三部分分别要学习的内容: 1.css样式:栅格系统,排版,代码,表格,表单,按钮,图片,辅助类,响应式工具. 2. ...
- win10 下安装linux子系统
一.开发人员选项 打开控制面板->程序与功能->启用或关闭windows功能 勾选 [适用于linux的windows子系统] 选项 打开win10设置 找到更新与安全 启动开 ...
- mybatis 优缺点和适用场合
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架, MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用 ...
- UVa-10954
10954 - Add All Time limit: 3.000 seconds Yup!! The problem name reflects your task; just add a set ...