OC-手动内存管理
来源:互联网 发布:脂肪坏处 知乎 编辑:程序博客网 时间:2024/05/16 19:18
一.为什么要进行内存管理
•移动设备的内存极其有限,每个app所能占用的内存是有限制的
•
•下列行为都会增加一个app的内存占用
Ø创建一个OC对象
Ø定义一个变量
Ø调用一个函数或者方法
•
•当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等
•
•如果app占用内存过大
Ø系统可能会强制关闭app,造成闪退现象,影响用户体验
二.OC中的内存管理是管理的内存中的哪一部分:
我们知道:内存分为五大区域:栈区,堆区,数据去,bss段,代码区。而最后三者是在程序启动时由操作系统进行控制的,所以不需要我们管理。栈区存储的也都是已经初始化的基本数据类型变量和函数。而我们创建的对象则分配在堆区中,是需要我们进行管理的。三.内存管理的管理范围
任何继承了NSObject的对象(所有的OC对象,对象类型)
对其他非对象类型(基本数据类型)无效(int、char、float、double、struct、enum等)
四.内存管理的种类。
1.手动内存管理:M(manually)R (reference)C (couting)
2系统自动管理:A(automatic )R (reference)C (couting)
在最新的Xcode中,默认内存管理管理方式是ARC想切换成MRC需要对其进行配置,如下:
五。引用计数器的介绍
对象在创建时,内部会自动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一判断标记。release会-1,retain会+1,retain后返回的是自己self指针。
<pre name="code" class="objc">#import <Foundation/Foundation.h>@interface person : NSObject@end@implementation person@endint main(int argc, const char * argv[]) { @autoreleasepool { /* 引用计数器的常见操作 给对象发送一条retain消息, 可以使引用计数器值+1(retain方法返回对象本身) 给对象发送一条release消息, 可以使引用计数器值-1 给对象发送retainCount消息, 可以获得当前的引用计数器值(通过%ld输出查看) 需要注意的是: release并不代表销毁\回收对象, 仅仅是计数器-1 注意:我们只能通过操作对象计数器,间接控制对象的释放与否。*/ //创建一个person 类的对象 p. person * p = [[person alloc]init]; // 对象创建后引用计数器就会加1。 <pre name="code" class="objc" style="font-size:18px;">[p release]; // p 被释放掉了 p = nil; //将 指针指向nil NSLog(@"%lu", [p retainCount]); //空对象调任何方法结果都是 0 // NSLog(@"Hello, World!"); } return 0;}
0 0
- OC-手动内存管理
- OC中手动管理内存
- OC手动内存管理注意事项
- OC的手动内存管理
- OC手动内存管理的规则总结
- iOS开发-Day20-OC 手动内存管理
- OC通讯录(MRC手动管理内存)
- oc增强之手动内存管理
- OC学习 第七节 手动内存管理
- [OC基础]手动内存管理
- OC语法<2.1>内存管理:手动内存管理1
- OC语法<2.2>内存管理:手动内存管理2
- OC-024.OC中多对象的手动内存管理
- OC-025.OC手动MRC内存管理@property的使用方法
- OC基础语法学习5:内存管理(手动管理)
- OC手动管理内存时出现程序崩溃
- OC基础-内存管理小结(手动)
- OC手动内存管理-方法的保留和释放
- GYM 100285 D. This cheeseburger you don’t need(水~)
- strlen()和sizeof()函数
- STL 自定义结构体集合运算
- 贪心算法之Evil Straw Warts Live
- 2015-3-21 学习豆瓣应用的奥妙
- OC-手动内存管理
- UITableView的封装和类的交互1
- 图的理论基础
- 【实例】html5-canvas绘制线段、矩形和圆
- 摇一摇截屏
- .Net 改变WebBrowser 内核版本
- 淘宝技术交流讲座笔记及其它
- 互联网+靠的还是实业
- 黑马程序员——Java基础02