- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOS 内存管理(台杰瑞教育IOS培训部原创)
烟台杰瑞教育科技有限公司(IOS开发培训部) 版权所有
------杰瑞教育() 专注IT技能培训 打造一流人才服务平台------
IOS 内存管理
软件运行时会分配和使用设备的内存资源,因此,在软件开发的过程中,需要进行内存管理,以保证高效、快速的分配内存,并且在适当的时候释放和回收内存资源。
一、Objective-C内存管理的对象 IOS开发中,内存中的对象主要有两类,一类是值类型,比如int、float、struct等基本数据类型,另一类是引用类型,也就是继承自NSObject类的所有的OC对象。前一种值类型不需要我们管理,后一种引用类型是需要我们管理内存的,一旦管理不好,就会产生非常糟糕的后果。
为什么值类型不需要管理,而引用类型需要管理呢?那是因为他们分配内存方式不一样。
值类型会被放入栈中,他们依次紧密排列,在内存中占有一块连续的内存空间,遵循先进后出的原则。引用类型会被放到堆中,当给对象分配内存空间时,会随机的从内存当中开辟空间,对象与对象之间可能会留有不确定大小的空白空间,因此会产生很多内存碎片,需要我们管理。
栈内存与堆内存从性能上比较,栈内存要优于堆内存,这是因为栈遵循先进后出的原则,因此当数据量过大时,存入栈会明显的降低性能。因此,我们会把大量的数据存入堆中,然后栈中存放堆的地址,当需要调用数据时,就可以快速的通过栈内的地址找到堆中的数据。
值类型和引用类型之间是可以相互转化的,把值类型转化为引用类型的过程叫做装箱,比如把int包装为NSNumber,这个过程会增加程序的运行时间,降低性能。而把引用类型转为值类型的过程叫做拆箱,比如把NSNumer转为float,在拆箱的过程中,我们一定要注意数据原有的类型,如果类型错误,可能导致拆箱失败,因此会存在安全性的问题。手动的拆箱和装箱,都会增加程序的运行时间,降低代码可读性,影响性能。
在IOS开发过程中,栈内存中的值类型系统会自动管理,堆内存中的引用类型是需要我们管理的。每个OC对象内部都专门有四个字节来存储引用计数器,它是一个整数,表示对象被引用的次数,通过它可以判断对象是否被回收,如果引用计数为0,对象回收,不为0不回收。当对象执行alloc、new或者retain时,引用计数加1,release时,引用计数减1。
二、Objective-C管理内存的方式 Objective-c中提供了两种内存管理机制MRC(Mannul Reference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。MRC与ARC区别如下图所示。
?
1.MRC(人工引用计数),手动管理内存。
MRC模式下,所有的对象都需要手动的添加retain、release代码来管理内存。使用MRC,需要遵守谁创建,谁回收的原则。也就是谁alloc,谁release;谁retain,谁release。
当引用计数为0的时候,必须回收,引用计数不为0,不能回收,如果引用计数为0,但是没有回收,会造成内存泄露。如果引用计数为0,继续释放,会造成野指针。为了避免出现野指针,我们在释放的时候,会先让指针=nil。
2.ARC(自动引用计数),自动管理内存。
ARC是IOS5推出的新功能,通过ARC,可以自动的管理内存。在ARC模式下,只要没有强指针(强引用)指向对象,对象就会被释放。在ARC模式下,不允许使用retain、release、retainCount等方法。并且,如果使用dealloc方法时,不允许调用[super dealloc]方法。
ARC模式下的property变量修饰词为strong、weak,相当于MRC模式下的retain、assign。strong :代替retain,缺省关键词,代表强引用。weak:代替assign,声明了一个可以自动设置nil的弱引用,但是比assign多一个功能,指针指向的地址被释放之后,指针本身也会自动被释放。
三、与内存有关的修饰符strong :强引用,ARC中使用,与MRC中retain类似,使用之后,计数器+1。
weak :弱引用 ,ARC中使用,如果只想的对象被释放了,其指向nil,可以有效的避免野指针,其引用计数为1。
readwrite : 可读可写特性,需要生成getter方法和setter方法时使用。
readonly : 只读特性,只会生成getter方法 不会生成setter方法,不希望属性在类外改变。
assign :赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量,仅设置变
您可能关注的文档
- FANUC系统数控床操作与编程试题.doc
- F66 制造型企人心再造(6-6).doc
- fawhit10月务报表分析自考真题和答案.doc
- Excel在财务管与分析中的应用基础知识.doc
- Fbbxjbe用友RP认证题库(工资).doc
- Fayyoac永锦源人员定位系统验收标准.doc
- Fbdwoko用友证考试练习试题库(总账工资固定资产报表应收应付)文库.doc
- Feajwfy浙江业大学保持共产党员先进性教育活动.doc
- FF 现场总线技术用中值得探讨的问题.doc
- Febjlxq浙江播电视大学学前教育专业(开放专科).doc
- IOS 本地通知(台杰瑞教育IOS培训部原创).docx
- IOS15189认过程中临床分子生物学实验室管理体会.docx
- IOS实现自动循环动广告--ScrollView的优化和封装(烟台杰瑞教育IOS培训部原创).docx
- IOS 生成本地验码(烟台杰瑞教育IOS培训部原创).docx
- IOS欢迎界面Lanch Screen动态加载广告(烟台杰瑞教育原创).docx
- IPMA-北京大学力资源管理自考-《人力资源战略与规划》考试大纲.doc
- IPMA-北京大学力资源管理自考-《工作分析与评价》考试大纲(本科).doc
- IPMA-北京大学力资源管理自考-《劳动关系与争议处理》考试大纲.doc
- IOS开发之地图导(烟台杰瑞教育IOS培训部原创).docx
- iPhone4S真辨别购机全攻略.doc
最近下载
- 2024中国电信股份有限公司陕西分公司校园招聘试题及答案解析.docx
- (正式版)-B 5768.2-2022 道路交通标志和标线 第2部分:道路交通标志.docx VIP
- 有毒有害气体安全防护培训.pptx VIP
- 北师大版数学六年级上册数学好玩备课教案.docx VIP
- 20-丙型肝炎病毒实验活动风险评估报告.doc VIP
- 《AI时代如何做好班主任》---校长在班主任培训会上的讲话.doc VIP
- 在作风建设专题研讨会上的发言材料.docx VIP
- 数字智慧方案IDC工业企业数字化的两种路径(35页PPT).pptx VIP
- 【PPT课件】2024特种设备重大事故隐患判定准则培训资料.pptx
- CATIA高级应用-七大技巧-个人总结,图文.pdf VIP
文档评论(0)