signal:"EXC_BAD_ACCESS",这就是访问了被释放的内存地址造成的。
1、内存泄漏:对象使用完没有释放,导致内存浪费。
2、僵尸对象:已经被销毁的对象(不能再使用的对象)
3、野指针:指向僵尸对象(不可用内存)的指针。给野指针发消息会报EXC_BAD_ACCECC错误。
4、空指针:没有指向储存空间的指针(里面存的是nil,也就是0)。在oc中使用空指针调中方法不会报错。
野指针
C语言: 当我们声明1个指针变量,没有为这个指针变量赋初始值.这个指针变量的值是1个垃圾指 指向1块随机的内存空间。
OC语言: 指针指向的对象已经被回收掉了.这个指针就叫做野指针.
僵尸对象
内存回收的本质.
申请1块空间,实际上是向系统申请1块别人不再使用的空间.
释放1块空间,指的是占用的空间不再使用,这个时候系统可以分配给别人去使用.
在这个个空间分配给别人之前 数据还是存在的.
OC对象释放以后,表示OC对象占用的空间可以分配给别人.
但是再分配给别人之前 这个空间仍然存在 对象的数据仍然存在.
僵尸对象: 1个已经被释放的对象 就叫做僵尸对象.
使用野指针访问僵尸对象.有的时候会出问题,有的时候不会出问题.
当野指针指向的僵尸对象所占用的空间还没有分配给别人的时候, - 这个时候其实是可以访问的.
因为对象的数据还在.
当野指针指向的对象所占用的空间分配给了别人的时候 这个时候访问就会出问题.
所以,你不要通过1个野指针去访问1个僵尸对象.
虽然可以通过野指针去访问已经被释放的对象,但是我们不允许这么做.
网友评论