每日一博 | 聊聊野指针与僵尸对象定位
[iOS研习记]——聊聊野指针与僵尸对象定位 一、从一个异常说起 在iOS项目开发中,或多或少的我们都会遇到一些Crash的情况,大部分Crash抛出的异常都是NSException层的,这类异常是OC层代码问题造成的,通常堆栈信息和异常的提示信息都非常明确,可以直接定位到出问题的代码,从而使这类问题的解决并不困难。可以引起Crash的异常除了NSException外,还有Unix层和Mach层的异常。 Mach异常一般是底层内核级的异常,我们可以通过一些底层的API来对这类异常进行捕获,这不是本文的讨论内容,这里不再赘述。Unix层是指对于开发者没有捕获的Mach异常,会被转换成对应的Unix信号传递给出错线程。 如果你在iOS项目在线上收集的异常中,有类似EXC_BAD_ACCESS的异常,则大概率是由于内存问题产生的野指针引起的。这也是本文我们要讨论的核心内容。 1. 什么是野指针? 当前我们在编写iOS程序时大多会采用ARC来进行内存管理,通常情况下我们无需过多的对内存管理进行关心。但是这并不代表不会产生内存问题。从原理上讲,我们在创建任何对象的时候,首先都会通过操作系统从内存...
