任何继承了NSObject的对象都需要内存管理,OC不像java,当没有指针引用对象时,对象所占的内存也不会消失,需要进行手动回收(int、char之类的基本数据不需要);可以通过引用计数器进行内存管理。 系统根据引用计数器判断对象需不需要回收 · 当计数器为0时,对象会被系统回收,系统会自动给对象发送 dealloc消息,此时对象不可用啦,是僵尸对象(p=nil); · 引用计数器占4个字节的存储空间; · 只要有alloc、new、copy、retain,就有release · 方法的使用 o retain 使计时器+1([p retain] 会返回对象本身); o release 使计数器-1 ;没有返回值 o retainCount 可以得到计数器的值;可以强转为int o dealloc 销毁对象,可以重新定义对象的dealloc方法(其中[supper dealloc]放在最后) 原则: · 只要还有人在用这个对象,这个对象就不会被回收 · 只要想使用这个对象,就让计数器+1 · 当不想使用这个对象时,就让计数器-1 注意: 1. 野指针:指向僵尸对象(内存已经被回收)的指针 2. 在OC中,给空指针发送消息不会报错 3. 错误 · EXC_BAD_ACCESS(访问了僵尸对象,是野指针错误) · message send to deallocated instance (给已经释放的实例发送消息)
|