已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OC内存管理的一些基本常识(一)1, 计数器的基本操作retain : 计数器加1release : 计数器减1retainCount: 返回当前计数器2, set方法的内存管理 -方法的实现-(void)setCar:(Car*) car if(car!=_car) _car release; _car = car retain; -dealloc方法的实现(不要直接调用dealloc)-(void)dealloc _car release; super dealloc;3, property参数 -OC对象类型 property(nonatomic,retain) 类名* 属性名 -非OC对象类型(int/float/enum/struct) property(nonatomic,assign) 类型名称 属性名 *property(nonatomic,assign)int age; (注)property(nonatomic,retain) id car; id也是OC对象,没有* *被retain过的属性必须在dealloc方法中release属性-(void)dealloc _car release; super dealloc;4, *autorelease *系统自带方法中,如果不包含alloc,new,copy,那么这些方法返回的对象都是已经autorelease过的 NSString stringWithFormat:.; NSDate date; NSDate alloc; * 开发中经常写一些类方法快速创建一个autorelease的对象 * 创建对象的时候不要直接使用类名,一般用self(二) 掌握三个方面 1, retain ,release 方法的基本使用 -retain:+1 -release:-1 -retainCount:获取当前的计数器 -dealloc *当一个对象要被回收的时候,就会调用 *一定要调用super dealloc,且一定要放到最后 2, 野指针、僵尸对象 -僵尸对象:所占用内存已经被回收的对象,僵尸对象不能再使用 -野指针:指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错 -空指针:没有指向任何东西的指针,给空指针发送消息不会报错 3, retain方法会的返回对象本身(三) 掌握知识点 1, 谁alloc(创建),谁release -如果通过alloc,new,copy来创建一个对象,那么你必须调用release或autorelease -或者说,不是你创建的,就不用你release 2, 谁retain,谁release -只要你调用了return,无论这个对象是如何生成的,你都要调用release 总结:有始有终 让对象加1,就必须让对象减1 3, 你想使用某个对象,就要让其计数器加1(让对象作一次retain操作) 不想再使用(占用)某个对象时,就让对象的计数器-1/* 速度 _speed : 直接访问成员变量 self-_speed : 直接访问成员变量 self.speed : get方法 self speed; */基本数据类型不需要管理内存(四) 内存管理代码规范 1, 只要调用了alloc,必须有release(autorelease) 如果对象不是通过alloc产生的,就不需要release 2, set方法的代码规范 -基本数据类型:直接复制 -(void) setSpeed:(int)speed _speed = speed; -OC对象类型: -(void)setCar:(Car*)car if(car!=_car) /判断是不是新传进来的对象 _car release; /对旧对象进行一次release _car = car retain; /对新对象进行一次retain操作 3, dealloc方法代码规范 -一定要调用super dealloc,而且要放到最后面 -对self(当前)对象所拥有的其它对象做一次release -(void)dealloc _car dealloc; super dealloc; /手动实现retain方法-(void)setBook:(Book*)book if (book!=_book) _book release; _book = book retain; /手动实现copy方法-(void)setBook:(Book*)book if (book!=_book) _book release; _book = book copy; (五) 1, 系统自带的方法里面没有包含allow,new,copy,说明返回的对象都是autorelease的 2, 开发中经常会提供一些类方法,快速创建一个已经autorelease过的对象 -创建对象时,不要直接用类名,一般用self +(id)person /谁调用,就返回谁的类型用,self替代Person Person alloc init autorelese return self alloc init autorelease; +(id)person /谁调用,就返回谁的类型用,self替代Person Person alloc init autorelese return self alloc init autorelease;+(id)personWithAge:(int)age / Person* p = Person alloc init autorelease; / Person* p = Person person; Person* p = self person; p.age = age; return p;(六) autorelease /开始,代表创建了释放池 1, autorelease 方法会返回对象本身 2, autorelease会将对象放到一个自动释放池中 当自动释放池被销毁时,对池中的所有对象做一次release操作 调用autorelease方法后,对象的计数器不变 3, autorelease可以创建无数多个 4, /结束,代表销毁释放池(七) 1, autorelease的基本用法 -会将对象放到一个自动释放池中 -当自动释放池被销毁时,会对池子中的所有对象作一次release操作 -会返回对象本身 -调用完autorelease方法后,对象的计数器不变 2, autorelease的好处 -占用内存较大的对象随便使用autorelease -占用内存较小的对象使用autorelease,没有太大影响 3, 错误写法 autorelease Person* p = Person alloc init autorelease; p release; /野指针错误 autorelease Person* p = Person alloc init autorelease autorelease; 4, 自动释放池 - 在ios程序运行过程中,会创建无数个池子,这些池子都是以构造存在(先进后出) - 当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池 5, 自动释放池的创建 方法一: autorelease 方法二: NSAutoreleasePool* pool = NSAutoreleasePool alloc init; / pool release; pool drain; ARC的判断准则 : 只要没有强指针指向对象,就会释放对象 指针分2种 - 强指针: 默认情况下,所有指针都是强指针 - 弱指针: _weak 关键字 (八) ARC特点总结: - 不允许调用release,retain,retainCount - 允许重写dealloc,但不允许调用super dealloc - property的参数 * strong : 成员变量是强指针,相当于原来的retain(适用于OC对象类型) * weak : 成员变量是弱指针,相当于原来的assign(适用于OC对象类型) * assgin : 适用于非OC对象类型 - *以前的retain改用st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肘关节骨折术后康复指南
- 蓄脓性中耳炎护理措施
- 新护理不良事件分析与对策
- 2025关于零售店申请合作的合同示例
- 2025农产品交易拍卖合同书
- 2025产品供应合同协议书
- 2025瓷砖供货合同模板
- 安全风险分级管控制度(水库工程)
- 新员工入职人事培训
- 生产管理前准备
- 中国法制史完整版电子课件全套电子教案
- 佛山市顺德区设置户外广告申请表
- 2024年贵州黔西南州政协机关考聘事业单位工作人员4人历年公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 介绍历史人物于谦
- 《陆上风电场工程施工安装技术规程》(NB/T 10087-2018 )
- (高清版)DZT 0211-2020 矿产地质勘查规范 重晶石、毒重石、萤石、硼
- 湖北过早文化
- 文化遗产数字化保护与传承
- 轻食营养配餐设计指南
- 四川省地图矢量经典模板(可编辑)
- 化学答题卡(A4版面)
评论
0/150
提交评论