OC笔记 - 手动内存管理的基本概念(2015.1.30)
来源:互联网 发布:ubuntu 命令行解压deb 编辑:程序博客网 时间:2024/06/02 02:36
1.手动内存管理基本概念
创建对象
1.分配内存空间,存储对象
2.初始化成员变量
3.反回对象的指针地址
1.对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯一依据,当我们的引用计数retainCount = 0的时候,系统会毫不犹豫回收当前对象
2.[对象 release] reatinCount - 1
3.[对象 retain] reatinCount + 1 ,返回self
4.我们的引用计数retainCount = 0的 对象就被销毁了
5.dealloc函数,当一个对象要被销毁的时候,系统会自动调用dealloc函数,通知对象你将要被销毁
内存管理原则(配对原则):只要出现了 new,alloc,retain,就一定配对出现一个release,autorelease
<span style="font-size:18px;">-(void)dealloc{ //在对象自身被销毁之前,一定要先调用[super dealloc]释放父类中的相关对象 [super dealloc]; NSLog(@"Person 被销毁了");}</span>
2.单个对象的内存管理分析
手动内存管理研究问题方法
1.野指针操作
2.内存泄漏
retainCount= 0
系统已经将p所指向的对象回收了
EXC_BAD_ACCESS 访问了不可访问的内存空间
被系统回收的对象我们称之为僵尸对象
默认情况下xcode为了提高编码效率,不会时时检查僵尸对象
如果你确定当前作用于中的对象已经不会再被使用了,为了防止野指针操作,通常我们会把不在使用的指针变量赋值为nil
只要对象的retainCount != 0就会一直存在在内存中
内存泄漏指的就是,不再被使用的对象,一直在内存中没有被销毁
野指针操作,当一个对象retainCount已经为0 时,调用retain方法,是不会使得对象起死回生的,同时还会发生野指针操作异常
4.set方法的内存管理分析
<span style="font-size:18px;">- (void)setCar:(Car *)car{ if (_car != car) //判断是否为原来的对象,若是则无需“去旧换新” { //c1 0 //relese旧值 [_car release];//[nil release]; //c2 2 //retain新值 _car = [car retain]; }</span>
5.@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方法名称
如果一个对象被生成成了成员变量或者是使用@property生成的符合内存管理的set方法,那么一定要在 dealloc函数对应一次release操作
注意:@property会自动声明带下划线的变量,但当同时重写setter和getter方法时不自动进行声明。
- OC笔记 - 手动内存管理的基本概念(2015.1.30)
- OC的手动内存管理
- OC-手动内存管理
- OC手动内存管理的规则总结
- OC通讯录(MRC手动管理内存)
- OC-024.OC中多对象的手动内存管理
- OC-025.OC手动MRC内存管理@property的使用方法
- OC中手动管理内存
- OC手动内存管理注意事项
- OC手动内存管理-方法的保留和释放
- OC的手动内存管理基础(IOS开发)
- OC基础-内存管理小结(手动)
- OC内存管理-OC笔记
- 一,7,0手动内存管理基本概念
- oc -内存管理 笔记
- iOS开发-Day20-OC 手动内存管理
- oc增强之手动内存管理
- OC学习 第七节 手动内存管理
- A Good Bye 2014(CF)
- Android获取View的高宽
- cc150:判断一棵树是否为平衡树
- Android使用AttributeSet自定义控件的方法
- B. New Year Permutation (CF)
- OC笔记 - 手动内存管理的基本概念(2015.1.30)
- [LeetCode]78.Subsets
- poj 2240 Floyd判断有向图负环(arbitrage)
- 杭电ACM 蜗牛出井
- C. New Year Book Reading(CF)模拟
- 【机器学习快讯】20150206机器学习快讯
- OpenCV配置C++篇(Debug与Release下有所区别)
- 自考路之小荷才露尖尖角
- UVa 11212 - Editing a Book <状态空间搜索+IDA*算法>