zoukankan      html  css  js  c++  java
  • 使用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、修改实现方法

  • 相关阅读:
    套接字的工作流程
    信安系统设计基础(个人报告阅读说明)
    1.1Linux 系统简介(学习过程)
    1.12Linux下软件安装(学习过程)
    作业3.5
    作业1
    变量与基本数据类型
    python入门
    计算机基础知识补充
    计算机基础
  • 原文地址:https://www.cnblogs.com/wangqw/p/5182458.html
Copyright © 2011-2022 走看看