黑马程序员-----OC内存管理(一)
来源:互联网 发布:写小说的网站 知乎 编辑:程序博客网 时间:2024/05/17 02:44
OC内存管理
1>基本原理
①为什么要进行内存管理
因为移动设备的内存容量是非常有限的,iPhone4的内存只有512MB,如果不对内存进行合理的管理,那么我们的机器内存很可能是不够用的。
②OC内存管理针对哪些范围
任何继承了NSObject的对象,对其他基本数据类型(int、char、float、double、struct、enum等)无效,就是说OC的内存只对OC对象有用。
2>引用计数器
①什么是引用计数器(4Byte)
OC的每个对象都会有一个引用计数器,是一个整数,表示“对象被引用的次数”,即现在有多少人在使用对象;而且每个对象内部都有4个字节的空间来存放引用计数器。
②引用计数器的作用
简单讲,引用计数器的作用就是,标识我们的对象是否应该被系统回收的一个标志,当且仅当一个对象的引用计数器为0,该对象才会被系统回收。具体的说,当使用alloc、new或者copy创建一个新对象时,新对象的引用计数器默认就是1;当一个对象的引用计数器值为0时,对象占用的内存就会被系统回收。换句话说,如果对象的计数器不为0,那么在整个程序运行过程,它占用的内存就不可能被回收,除非整个程序已经退出
③引用计数器的操作
retain:当给对象发送一条retain消息,或者说调用对象的retain方法,那么对象的引用计数器+1;
release:当给对象发送一条release消息,或者说调用对象的release方法,那么对象的引用计数器-1;
retainCount:当给对象发送一条retainCount消息或者说调用对象的retainCount方法,将返回引用计数器的值。
④对象的销毁
销毁条件:当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收。
对象遗言:当对象在被销毁的时候,回想系统发出一个dealloc消息,或者说对象会调用dealloc方法,这个dealloc这就是对象的遗言。
dealloc(遗言)重写:通常我们会重写对象的dealloc方法;但是重写dealloc方法必须调用[super dealloc]调用父类的dealloc方法,而且必须写在最后面。
注意:dealloc方法是不能直接调用的,因为一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致野指针错误。
⑤野指针
指向僵尸对象(不可用内存)的指针;
野指针错误标识:EXC_BAD_ACCESS访问了一块坏内存(被回收,不可用的内存);
空指针:没有指向任何对象的指针;
[nil release]是合法的
僵尸对象检测开关:EnableZombiem Objects
默认情况下,Xcode是不会管僵尸对象的,使用一块被释放的内存也不会报错。为了方便调试,应该开启僵尸对象监控
2>小零碎
①retain返回对象本身。
②[nil release]合法,OC没有空指针错误。
③dealloc方法通常会被重写,最后一句是[super dealloc]。
④EXC_BAD_ACCESS出现这个错误肯定是内存出错
⑤僵尸对象检测开关:EnableZombiem Objects
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
- 黑马程序员-----OC内存管理(一)
- 黑马程序员--OC--内存管理(一)
- 黑马程序员——OC内存管理(一)
- 黑马程序员----第六篇 OC内存管理(一)
- 黑马程序员-----------ios培训 oc内存管理(一)
- 黑马程序员-----OC内存管理(二)
- 黑马程序员-----OC内存管理(三)
- 黑马程序员(OC内存管理)
- 黑马程序员--OC--内存管理(二)
- 黑马程序员 — OC(内存管理)
- 黑马程序员-OC-内存管理
- 黑马程序员--oc:内存管理
- [黑马程序员][OC]内存管理
- 黑马程序员-OC内存管理
- 黑马程序员---OC--内存管理
- 黑马程序员---oc 内存管理
- 黑马程序员-OC-内存管理
- 黑马程序员-OC内存管理
- hpu 2504 又见GCD
- c里面使用libcurl库实现发送post并获取post到的内容
- 2014-7-25-c#两数相除
- 数据挖掘相关公式的概述
- 数据库系统概论-[04]索引
- 黑马程序员-----OC内存管理(一)
- Best Time to Buy and Sell Stock II
- 伟创OA系统开发设计原则
- ubuntu安装软件的方式
- 最小生成树prim算法实现
- gdb调试命令---超简单的
- Unity3D:详解注视旋转(Quaternion.LookRotation)
- 研华的freescale iMX53 产品WINCE 7 第一次部署
- UML