内存管理
2015-11-02 10:19
169 查看
1. 创建对象
1> 分配内存空间,存储对象
2> 初始化成员对象
3> 返回对象的指针地址
2. retainCount
1> 对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数 retainCount = 0 的时候,系统会毫不犹豫回收当前对象
2>[对象 release]retainCount -1
3>[对象 retain]retainCount +1
4> 我们的引用计数retainCount =0 时,对象就被销毁了
5> dealloc函数,当一个对象要被销毁的时候系统会自动调用dealloc函数,通知对象你将被销毁
6>可以重写 dealloc 函数,(看它什么时候被调)
3. 内存管理原则(配对原则):只要出现了 new,alloc ,retain,就一定配对出现一个 release, autorelease
4.手动内存管理的研究问题
1>野指针
(如果确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为
nil)
(野指针操作,当一个对象retainCount已经为0时,调用retain方法,是不会使得对象起死回生的,同时还会发生野指针操作异常)
2>内存泄漏 (只要对象的retainCount !=0,就会一直存在在内存中,而内存泄漏指的就是,不在被使用的对象,一直在内存中没有被销毁)
1> 分配内存空间,存储对象
2> 初始化成员对象
3> 返回对象的指针地址
2. retainCount
1> 对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数 retainCount = 0 的时候,系统会毫不犹豫回收当前对象
2>[对象 release]retainCount -1
3>[对象 retain]retainCount +1
4> 我们的引用计数retainCount =0 时,对象就被销毁了
5> dealloc函数,当一个对象要被销毁的时候系统会自动调用dealloc函数,通知对象你将被销毁
6>可以重写 dealloc 函数,(看它什么时候被调)
-(void)dealloc { //在对象自身被销毁之前,一定要先调用[super dealloc]释放父类中的相关对象 [super dealloc]; Nslog(@"%lu",p.retainCount); }
3. 内存管理原则(配对原则):只要出现了 new,alloc ,retain,就一定配对出现一个 release, autorelease
4.手动内存管理的研究问题
1>野指针
(如果确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为
nil)
(野指针操作,当一个对象retainCount已经为0时,调用retain方法,是不会使得对象起死回生的,同时还会发生野指针操作异常)
2>内存泄漏 (只要对象的retainCount !=0,就会一直存在在内存中,而内存泄漏指的就是,不在被使用的对象,一直在内存中没有被销毁)
相关文章推荐
- LeetCode 012 Integer to Roman
- (转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出
- jQuery EasyUI 窗口 – 创建简单窗口
- 一级建造师和二级建造师考试内容上的区别
- Dialog
- Intent传递对象的两种方法
- android开发之shape详解
- Apache Hawq Data Locality简介 (1) [作者:张桓]
- 大连理工大学文科实验教学中心网站和新闻学研究与方法网站
- 使用UGUI做下拉列表的方案
- ld命令和u-boot中的lds文件实例和简单实例分析
- js正则表达式
- jquery实现网页的页面平滑滚动效果代码
- SharedPreferences浅谈+实例
- python实现机器学习之随机森林
- 此实现不是 Windows 平台 FIPS 验证的加密算法的一部
- 案例|服务化架构系统监控难题解决方案
- 鸡蛋地硬度
- string.Format字符串格式化说明
- hdu 5524 Subtrees(高效)