zoukankan      html  css  js  c++  java
  • iOS_项目完成后测试app

    在项目中遇到各种问题:

    (1)thread 1:exc_bad_access(code=1,address=0x10)

    完全不知道错误出现在哪里。

    错误原因:

    exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后。再去通过该对象去调用其它的方法就会出现野指针错误。

    例如:

    Person *jerry = [[Person alloc]init]; // retainCount引用计数为1

    [jerry eat]; // 调用吃的方法

    [jerry release]; // 释放jerry这个对象到 retainCount引用计数为0


    // 此时如果继续引用jerry这个对象就会出现野指针错误,exc_bad_access

    [jerry sleep];


    解决方法:

    首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的。

    IOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是当 设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释 放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的 方式消失, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

    例如会出现这样的提示:

    [jerry sleep]:message sent to deallocated instance 0x78d7ed0

    设置NSZombieEnabled环境变量,XCode4中:

    你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将 NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.

    或者在 Xcode4 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。

    按照上面的步骤做完后,再次运行程序,不断操作,发现错误是"*** -[SDCycleScrollView scrollViewDidScroll:]: message sent to deallocated instance 0x12db0bac0",错误位置在”[SDCycleScrollView scrollViewDidScroll:]“方法中,后来发现是SDCycleScrollView已经释放,但是SDCycleScrollView的定时器却没有被释放。




  • 相关阅读:
    YTU 2405: C语言习题 牛顿迭代法求根
    学军中学推理社2017届招新试题
    UWP开发入门系列笔记之(零):UWP的前世今生
    微信开发基础教程
    text-align:center与<CENTER>的区别
    css中em与px的区别
    text-align 属性规定元素中的文本的水平对齐方式。
    常用颜色代码
    CSS中font-style的属性有Italic oblique,它们俩的区别是什么呢?
    css对大小写不敏感,空格不会影响css在浏览器的工作效果
  • 原文地址:https://www.cnblogs.com/sugeladi/p/5046696.html
Copyright © 2011-2022 走看看