一。
1.内存管理重点
1).当多一个人使用这个对象的时候,应该为这个对象发送retain消息
2).当少一个人使用这个对象的时候,应该为这个对象发送release消息
2.ARC机制下,retain,release,dealloc这些方法无法调用
3.内存管理原则
1).有对象的创建,就要匹配一个release
2).retain的次数和release的次数匹配
3).谁用谁retain,谁不用谁release,谁负责retain,谁就负责release
4).有始有终,有加有减。有retain,就用该匹配一个release达到平衡。
二。
1.野指针
c语言中的野指针:定义一个指针变量,没有初始化,这个指针变量的值是一个垃圾值,指向一块随机的空间,这个指针就叫做野指针。
OC当中的野指针:指针指向的对象已经被回收了,这样的指针就叫做野指针。
2.对象回收的本质
内存回收的本质:
申请一个变量,实际上就是向系统申请指定字节数的空间,这些空间系统就不会再分配给别人了。当变量被回收的时候代表变量占用的字节空间从此以后系统可以分配给别人使用,但是字节空间中存储的数据还在。
回收对象:
对象回收指的是对象占用的控件可以分配给别人。
当对象占用的空间没有分配给别人之前,对象数据还在。
3.僵尸对象
一个已经被释放的对象,但是这个对象所占用的空间还没分配给别人,这样的对象叫做僵尸对象。
通过野指针访问僵尸对象时候,有可能有问题(当僵尸对象中占用的空间已经分配给别人的时候),有可能没问题(当僵尸对象中占用的空间还没分配给别人的时候)
4.只要对象成为了僵尸对象,无论如何都不允许访问。所以希望如果访问的是僵尸对象,无论如何要报错,这个时候OC有一个僵尸对象的实时检查机制可以去实现
操作步骤:
1).

2).

5.为什么不默认打开僵尸对象检测
一旦打开,那么每访问一个对象的时候,都会检查这个对象是否为一个僵尸对象,这样会很消耗性能。
6.如何避免僵尸对象错误
1).当一个指针成为野指针以后,将这个指针的值设置为nil
当一个指针的值为nil,通过这个指针去调用对象的方法(包括点语法)的时候,不会报错,只是没有任何反应,但是如果通过直接访问属性,就会报错
网友评论