标签:
1.
内存管理的实质就是管理对象的计数器.
需要程序员手动管理内存的对象都是存放在堆区的,堆区的内存是动态分配的
栈区的内存会被系统自动回收
2.
内存管理的范围: 任何继承自 NSObject的对象
对其他非对象类型无效(例如; int ,char ,float ,double ,struct ,enum 等 )
3.
1). 系统是如何判断什么时候需要回收一个对象所占用的内存?
根据对象的引用计数器的值来判断什么时候需要回收内存; 引用计数器的值是一个整数,每个 OC 对象内部都有4个字节的存储空间来存放自己的引用计数器,引用计数器从字面上可以理解为:对象被引用的次数,也可以理解为:有多少人正在使用这个对象,当计数器的值为0的时候对象占用内存就会被系统回收.
2).计数器的常见操作
当使用 alloc, new, copy 创建对象时引用计数器就默认为1(就好比一个人刚出生时只有一条命,当命的条数减为0的时候,这个人就 over 了,对象也是如此)
给对象发送一条 retain 消息,计数器的值就会 +1, 给对象发送 release 消息,计数器的值就会 -1(注意: release 并不代表销毁对象,仅仅表示计数器值 -1), 给对象发送 retainCount 就可以获得当前计数器的值.
3).dealloc 的理解
当一个对象的计数器值为0的时候,就表示该对象即将被销毁,此时系统会自动给对象发送 dealloc 消息(因此,从 dealloc 方法是否被调用就可以判断该对象是否被销毁), 重写dealloc 方法时可以释放相关资源(当该对象有引用其他对象时),并且必须在最后面调用[super dealloc]方法,(deallc 就相当于一个对象的遗言,在这里做最后事情)
4).循环引用的解决方法
当两个对象发生循环引用时,一个对象在声明属性时用 retain, 另一个对象就需要用 assign,这样就只有一个对象的引用计数器加1,而另一个对象的引用计数器不会变化
标签:
原文地址:http://www.cnblogs.com/jiangqi/p/4607761.html