内存管理基本使用 内存氛围堆区,栈区,常量区,静态区,代码区 堆区是系统不会自动回收的内存 栈区是系统会自动回收 为什么要内存管理:目的就是为了防止内存泄漏 内存泄漏:一个对象不再使用,但这个对象却没有被销毁,空间没有释放,则这个就叫做内存泄漏 内存管理的原则:不使用的对象必须销毁,释放内存(防止内存泄漏——)
内存管理的方式: 对象中有一个引用计数器在记录当前的引用.每增加一次引用,计数器加1,每减少一次引用计数器减1,当引用计数器的值是0时,这个对象会自动销毁,释放内存
目的:让对象的引用计数器统计是准确的。保证,当前这个对象没有被任何引用的时候,计数器的值为0 retain 计数器+1 release 计数器-1 retainCount :表示对象引用计数器的值 dealloc:对象被销毁时,必须执行这个方法。(系统会自动调用对象的这个方法)(所以要检测,在实现中重写dealloc方法让他打印一段文字,然后super dealloc就好 凡是一个类 alloc 或new 或copy 都会让计数器的值设置为1 谁引用,谁retain,各司其职 谁alloc或new 谁release 谁retain 谁release 多个对象指针如果指向同一个对象时,它们操作的计数器是同一个 注意: 1,一个对象被销毁后,不能再使用 2,一个对象引用了另一个对象,则必须在对象引入的时候retain,然后在对象自己被销毁的时候release - Person*per=[[person allocinit];
- person*per2=per;
- [per2 retain];
per与per2 都是局部变量,它们在方法执行完后都会被销毁,则不会在引用对象,这个时候要让计数器减一 [per release]; [per2 release];这时候 retiancount计数器的值在减一,成了0,则对象自动销毁,系统调用delloc方法 一个对象被销毁,内存释放,则称之为僵尸对象 一个指针如果指向僵尸对象,我们就将这个指针叫做野指针(表示这个指针指向的数据不存在了) - Person* per=[[person alloc init];
- [per release];此时,对象的计数器为0,被销毁
- [per releses];错误的
|