一、野指针:
c语言的野指针:定义一个指针变量没有初始化,指针变量的值指向一块随机的空间,这个指针叫做野指针。
oc中的野指针:指针指向的对象已经被回收,这样的指针叫做野指针。
二、僵尸对象:
一个已经被释放的对象,但是这个对象所占空间还没有分配给别人使用,这样的对象叫做僵尸对象。
野指针去访问僵尸对象有可能出现问题。设置野指针为nil,当指针为nil时,通过这个指针去调用对象的方法,不会报错,没有任何反应。
打开检查僵尸对象机制(选中diagnostics诊断中的enable zombie objects),只要访问僵尸对象,无论空间是否被分配都会报错。
无法复活一个僵尸对象:
Person *p1=[Person new];//1
[p1 release];//0 僵尸对象
[p1 retain];//无法复活
三、内存泄漏
指一个对象没有被及时回收,在该回收的时候没有被回收,一直保留在内存中,直到程序结束时才回收。
单个对象的内存泄漏情况:
1)有对象的创建,没有对应的release
2) retain的次数和release的次数不匹配
3)在不适当的时候为指针赋值nil
4) 在方法中为传入的对象不适当的retain
5) 出现循环引用的情况,相互引用的对象不能被释放