内存管理
2015-11-15 20:55
155 查看
从刚开始,就一直听到学长,还有一些学的比我快的同学再说内存管理这个问题,但是听他们讲并不能让我完全理解这个问题,所以我决定要好好学习一下内存管理 在写OC程序时会创建大量的对象,有些系统会自动释放,但当我们把它存储在堆中时,它就不能自动释放,如果不能及时释放,就会一直在那里占着我们的内存,我们就需要手动释放它们 我们正在使用的X-code中引入了ARC机制,会自动给我们的程序添加释放内存的代码,但有时候他并不能完美的解决你的问题,所以我们要学会自己手动释放内存。因为在OC中没有垃圾回收机制,所以我们必须要用到一个东西,他叫计数器。在OC中,每个对象内部都有一个与之对应的整数,叫做“引用计数器”,这个对象创建后,它的引用计数器为1,当调用了对象的alloc、return、new、copy方法后引用计数器会+1,当release后-1,当引用计数为0,那么系统会销毁这个对象。 当一个对象被回收后,我们可以用dealloc来确定他是否被回收,当他被释放后,我们必须把最后引用他的变量手动设置成nil,不然会出现指针指向一个已经被释放掉的内存的错误。 我们在释放内存时,必须遵守一个规则,那就是**谁创建,谁释放** 当一个对象被创建,被其他方法调用后需要释放的,在该方法内释放后必须重新赋值,并且retain,否则会发生你在需要调用它时会发生错误。在给一个对象赋新的值的时候,也必须先对原有的值进行release操作。 还可以用@property惊醒自动实现。 (http://img.blog.csdn.net/20151115204530406) @property可以添加三个参数,如果我们不手动设置,则系统会选择默认值(atomic,readwrite,assign) 在OC中也存在一个自动释放内存的机制,叫做“自动释放池”,这是一个半自动的释放机制,自动释放池就是我们新创建的一个OC程序时自动出现的@autoreleasepool{},在对象初始化时如果点用了@autoreleasepool,那么这个对象会自动调用一次release方法,这样就起到了自动释放的作用。**自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象** ObjC中类库中的静态方法一般都不需要手动释放,内部已经调用了autorelease方法。 唐隽
相关文章推荐
- HDU1019 Least Common Multiple
- poj 1422 Air Raid(最小路径覆盖)
- HDU-2002 计算球体积
- Python并行化
- ORA-02291: 违反完整约束条件 - 未找到父项关键字
- 人生的改变———人生的开端
- 【树链剖分】[SPOJ-QTREE]Query on a tree
- 递归的性能分析与经典运用
- MySql服务启动不了的问题
- 原生JS 获取浏览器、窗口、元素等尺寸的方法及注意事项
- Java [leetcode 36]Valid Sudoku
- .NET破解之分享给新注册的朋友
- Redhat源码编译*.tar.gz安装包(一)
- AutoLayout总结
- js学习笔记
- 【Java】Java运行cmd命令直接导出.sql文件
- 【uml】-总结
- Sublime Text3插件安装
- HDU4842-过河
- 我的MYSQL学习心得链接