【OC中的内存管理知识】
2015-10-22 11:39
253 查看
什么是内存管理?
内存管理是指,程序员对堆空间的管理。内存管理的任务就是保证开辟的空间能够被正确释放。
内存管理存在的问题
1.内存泄漏 :只开辟空间,不释放空间
2.提起释放:该堆空间没有使用完毕,就被释放掉了
3.重复释放:把一块堆空间给释放多次
内存泄漏和提前释放这两个问题短时间内不会造成程序崩溃,重复释放,程序直接崩溃.
oc内存管理的黄金法则
(1)凡是alloc、new、retain、copy、mutblecopy(以及有new、 copy、 mutblecopy开头的)方法,【创建】(此处的创建意思就是调用了这些方法)的对象,都需要使用release或autorelease方法释放。
(2)谁【创建】,谁【释放】。用哪个类创建,哪个类来释放
自动释放池:
【autoreleasepool】类似于一个数组,当一个对象调用方法autorelease时,autorelease并不会将计数器减一,而是将当前对象,地址添加到自动释放池中,当池释放,会释放每个元素。
原则:能不用就不用,在ios程序中,每个触发周期都会创建并释放一个自动释放池。
一个自动释放池,不会打断一个函数的调用,所以说,如果对象只用在当前函数中,离开函数,就不用了,可以使用自动释放
内存管理是指,程序员对堆空间的管理。内存管理的任务就是保证开辟的空间能够被正确释放。
内存管理存在的问题
1.内存泄漏 :只开辟空间,不释放空间
2.提起释放:该堆空间没有使用完毕,就被释放掉了
3.重复释放:把一块堆空间给释放多次
内存泄漏和提前释放这两个问题短时间内不会造成程序崩溃,重复释放,程序直接崩溃.
oc内存管理的黄金法则
(1)凡是alloc、new、retain、copy、mutblecopy(以及有new、 copy、 mutblecopy开头的)方法,【创建】(此处的创建意思就是调用了这些方法)的对象,都需要使用release或autorelease方法释放。
(2)谁【创建】,谁【释放】。用哪个类创建,哪个类来释放
自动释放池:
【autoreleasepool】类似于一个数组,当一个对象调用方法autorelease时,autorelease并不会将计数器减一,而是将当前对象,地址添加到自动释放池中,当池释放,会释放每个元素。
原则:能不用就不用,在ios程序中,每个触发周期都会创建并释放一个自动释放池。
一个自动释放池,不会打断一个函数的调用,所以说,如果对象只用在当前函数中,离开函数,就不用了,可以使用自动释放
相关文章推荐
- 死锁查看处理(一)
- java基本数据类型相关
- JSP页面文件中base标记用法实例分析
- MySql中having
- CocoaAsyncSocket 网络通信使用之RHSocketKit框架(四)
- scala 两种方法实现单词计数
- 推荐!手把手教你使用Git
- 整理iOS9适配的一些坑
- IOS—使用Storyboard实现复杂界面
- Java一步一脚—排序(最基本的排序,两种快排,归并排序
- 学习Android推送功能笔记(5)---Mina初体验
- 【多线程】Java线程面试题 Top 50(转载)
- Matlab文件操作
- MATLAB的输入与输出语句
- flash sokect 通讯
- Matlab回显语句
- Matlab暂停语句
- POJ2886(线段树)
- tabviewcell 上次选中和这次选中
- Spring MVC 前台get请求的时候controller中拿到中文字符乱码