如何Check僵尸对象

野指针和僵尸对象

野指针:

C语言:当我们声明一个指针变量,没有为这个指针变量赋初始值,这个指针变量的值是一个垃圾指针,指向一块随机的内存空间。
OC: 指针指向的对象已经被回收掉了,这个指针就叫做野指针。

僵尸对象:
野指针指向的已经释放的对象就叫僵尸对象。

空指针:
没有指向存储空间的指针

潜在风险

使用野指针访问僵尸对象,有的时候会出问题,有的时候不会出问题。当野指针指向的僵尸对象所占用的空间还没有分配给其他对象时,可以进行访问,因为对象数据还在。否则,就会出现程序崩溃,报EXC_BAD_ACCESS错误。

如何检测?

Xcode集成了检测僵尸对象的功能,但由于开启此项功能比较耗性能,所以默认是关闭的,需要我们手动开启。开启步骤如下:

第一步:打开Xcode,选择左上角Xcode->Preferences->Behaviors,设置一下输出信息,在调试的时候可以给我们提供更多的信息。
第二步:设置环境变量:菜单->Product->Scheme->Edit Scheme,勾选下图红色框内的三个选项。
第三步:运行程序,程序检测到僵尸对象会中止运行。
第四步:在控制台查看日志和进程号(图示进程号为4984
第五步:打开终端,输入sudo malloc_history + 进程号 + 内存地址,得到日志,可以通过路径找到真正的原因。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 iOS崩溃是让iOS开发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很...
    齐滇大圣阅读 66,038评论 29 443
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,153评论 0 12
  • //--------------------内存管理 内存管理范围: 管理任何继承NSObject的对象,基本数据...
    指尖猿阅读 924评论 0 1
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,269评论 0 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,853评论 0 4

友情链接更多精彩内容