OC 内存管理 --个人理解
2015-12-06 19:05
218 查看
OC 有垃圾回收机制,但是只是适用于Mac端开发,并且Xcode 默认是没有开启垃圾回收机制的,如果做Mac端开发,需要自己手动开启。
iOS端 开发 是 没有垃圾回收机制的,那么iOS下的内存是怎么管理的呢?
编译器在编译阶段已经自动为我们的对象 添加上了 retain/copy 以及release ,autorelease,所以我们不需要去管理。
需要注意的一点就是,autorelease 是在 出了 自动释放池之后 才 释放对象。
在 dealloc 中,我们需要进行处理的是,强引用的delegate,定时器实例,以及添加的观察者(虽然释放了该对象,但是并没有移除该对象的观察者关系,所以需要我们自己释放)
以上 是我自己 目前的理解,若有不周,欢迎纠正。
iOS端 开发 是 没有垃圾回收机制的,那么iOS下的内存是怎么管理的呢?
那么,我个人在一年多的开发经验中,总结了自己的一些理解,若有错误,还请纠正。
1、MRC下,OC的内存管理遵循三条原则:原则一 | 原则 二 | 原则 三 |
---|---|---|
只要是alloc/retain/copy 的都使引用计数加1 | 通过便利构造器方法得到的对象,我们不需要管理他的内存,因为他的内部已经对其进行了管理 | alloc/retain/copy 要和 release的次数一致,也就是要保证你创建的或拥有的,你必须保证将其释放掉。 |
在MRC下 这三条原则适用所有的情况。
2、ARC 适用的 自动释放池(autoreleasepool)编译器在编译阶段已经自动为我们的对象 添加上了 retain/copy 以及release ,autorelease,所以我们不需要去管理。
需要注意的一点就是,autorelease 是在 出了 自动释放池之后 才 释放对象。
在 dealloc 中,我们需要进行处理的是,强引用的delegate,定时器实例,以及添加的观察者(虽然释放了该对象,但是并没有移除该对象的观察者关系,所以需要我们自己释放)
以上 是我自己 目前的理解,若有不周,欢迎纠正。
相关文章推荐
- ShareSDK 实现新浪微博分享(微信,QQ,新浪微博类似)
- C#篇-面向对象之继承
- SVN解决冲突Resolving Conflicts
- 题解: HDU 2141 Can you find it? (二分查找)
- spring框架学习(一)
- Matlab textscan
- Python基础09 面向对象的进一步拓展
- 设计模式之—装饰者
- 工作中新接触的问题
- 黑马程序员—javaSE—面向对象
- Java获取URL链接的文件类型
- umount 时出现的 “Device is busy”
- 常用性能测试方法
- 我对kalman滤波的理解
- [string]Reverse Words in a String
- Python基础08 面向对象的基本概念
- 【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
- 符号三角形(hdu 2510 搜索+打表)
- 第十五周——项目一:验证算法
- Eclipse 设置自动提示