手动管理内存的知识点整理
来源:互联网 发布:颜艺MMD动作数据 编辑:程序博客网 时间:2024/06/06 00:55
学习iOS开发,也有快半年了,经过向大虾们的取经,愈发的感觉到学习管理内存的重要性。apple虽然给我们提供了好用的ARC机制,但要想真正用好ARC还要“知其所以然”——学会手动管理内存。
有位大虾曾对我说过,手动管理内存的知识,面试时99%会考到。
下面开始是我的学习笔记。
-------------------------------------------我是华丽的分割线-------------------------------------------
一、手动管理内存的基本概念
(一)创建对象实际上分为三个步骤
1.分配内存空间,存储对象
2.初始化成员变量
3.反回对象的指针地址
(二)琐碎的小玩意
1.对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数retainCount = 0的时候,系统会毫不犹豫回收当前对象
2.[对象 release] reatinCount - 1
3.[对象 retain] reatinCount + 1 ,返回self
4.我们的引用计数retainCount = 0的 对象就被销毁了
5.dealloc函数,当一个对象要被销毁的时候,系统会自动调用dealloc函数,通知对象你将要被销毁,重写dealloc方法时,一定不要忘了调用父类的dealloc方法
6.内存管理原则(配对原则):只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease
二、单个对象的内存管理分析
1.内存管理原则(配对原则):只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease
2.手动内存管理主要研究两个问题:
1.野指针操作
2.内存泄漏
3.当retainCount = 0时,系统已经将p所指向的对象回收了,错误“EXC_BAD_ACCESS”,表示访问了不可访问的内存空间,被系统回收的对象我们称之为僵尸对象.默认情况下xcode为了提高编码效率,不会时时检查僵尸对象.让Xcode检测僵尸对象的方法是在调试项目菜单里选择Edit Scheme->run->Memory Management->Objective—C->Enable Zombie Objects项选中。(如果你调的项目比较大,类和对象比较多,千万不要选择实时检测僵尸对象,不然编译时间会长得痛不欲生)
4.如果你确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为nil
5.只要对象的retainCount != 0 就会一直存在在内存中
6.内存泄漏指的就是,不再被使用的对象,一直在内存中没有被销毁
7.野指针操作,当一个对象retainCount已经为0 时,调用retain方法,是不会使得对象起死回生的,同时还会发生野指针操作异常
三、手动内存管理类的相互引用问题
如果你的程序出现相互引用问题,那么一端要改成assign方式,不能够使用retain(回导致内存泄漏问题)
四、@property参数
(一)@property的作用
1.生产get与set方法的声明
2.生成get与set方法的简单实现
3.若果你没有声成名相对象的成员变量,那么他会自动生成一个_开头的成员变量
(二)@property 参数分为4类
1.与set方法内存管理相关参数
retain: 要生成符合内存管理原则的set方法(应用与对象类型)
assign: 直接赋值,(对象类型,基本数据类型)
copy : 这个我也不太了解
2.多线程相关
nonatomic: 不生成多线程线管代码,使用这个就可以了(效率高一点)
atomic:生成多线程线管代码(不写默认是这种方式)
实际开发中,只要是对象类型的@property都写成下面
3.是否要生成set与get方法
readwrite: 可读可写属性,同时生成set与get方法
readonly : 只读属性,只生成get方法
4.set与get方法名称相关的参数
setter:设置生成的set方法名称
getter:设置生成的get方法名称
0 0
- 手动管理内存的知识点整理
- OC的手动内存管理
- OC手动内存管理的规则总结
- 8,手动内存管理
- 手动内存管理
- iOS手动内存管理
- OC-手动内存管理
- 15 手动内存管理
- 手动进行内存管理
- golang手动管理内存
- 手动内存管理方法
- 共享内存知识点整理
- 内存管理之手动管理
- 内存管理方面知识点
- 黑马程序员——ios知识整理——MRC手动内存管理
- Objective-C手动内存管理
- OC中手动管理内存
- OC手动内存管理注意事项
- RobotFramework+Selenium2环境搭建与入门实例
- 高性能网关设备及服务实践
- 查找
- springMvc传递对象参数一些问题
- mongodb入门之mongodb客户端使用
- 手动管理内存的知识点整理
- Unity技术详解之血条的实现
- [POJ1067] 取石子游戏 && 博弈
- 开公司需要了解的相关法律
- mongodb入门之mongodb master slvae集群
- zoj 3847 Collect Chars(ac自动机 + spfa)
- [UVA1378] A Funny Stone Game && SG函数
- mongodb入门之mongodb副本集
- VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法