好程序员特训营学习笔记_ios内存问题

好程序员特训营学习笔记_ios内存问题

ID:41971182

大小:51.00 KB

页数:4页

时间:2019-09-05

好程序员特训营学习笔记_ios内存问题_第1页
好程序员特训营学习笔记_ios内存问题_第2页
好程序员特训营学习笔记_ios内存问题_第3页
好程序员特训营学习笔记_ios内存问题_第4页
资源描述:

《好程序员特训营学习笔记_ios内存问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Objective-C提供了三种内存管理方式:manualretain-release(MRR,手动管理),automaticreferencecounting(ARC,自动引用计数),garbagecollection(垃圾冋收)□iOS不支持垃圾回收;ARC作为苹杲新提供的技术,苹果推荐开发者使用ARC技术來管理内存;这篇笔记主耍讲的是手动管理。内存管理的目的是:1.不要禅放或者覆盖还在使用的内存,这会引起程序崩溃;2.释放不再使用的内存,防止内存泄iOS程序的内存资源是宝贵的。MRR手动管理

2、内存也是基于引用计数的,只是需要开发者发消息给某块内存(或者说是对象)来改变这块内存的引用计数以实现内存管理(ARC技术则是编译器代替开发者完成相应的工作)。一块内存如果计数是零,也就是没有使用者(owner),那么objective-C的运行环境会自动冋收这块内存。objective-C的内存管理遵导下面这个简单的策略:注:文档中把引用计数加1的操作称为“拥冇”(own,或者takeownershipof)某块对象/内存;把引用计数减1的操作称为放弃(relinquish)这块对象/内存。拥何对

3、象时,你可以放心地读写或者返回对象;当対象被所有人放弃时,objective-C的运行环境会回收这个対象。1.你拥有你创建的对象也就是说创建的对彖(使用alloc,new,copy或者mutalbeCopy筹方法)的初始引用计数是1。2.给对彖发送retain消息后,你拥有了这个对象3.当你不需要使用该对彖时,发送release或者autorelease消息放弃这个对彖4.不要对你不拥有的对彖发送“放弃”的消息注:简单的赋值不会拥冇某个对象。比如:•••NSStringFame=person.fu

4、llName;•••上面这个赋值操作不会拥冇这个对彖(这仅仅是个指针赋值操作);这和C++语言里的某些基于引用计数的类的行为是冇区别的。想拥有一个objective-C对象,必须发送“创建”或者retain消息给该对象。dealloc方法dealloc方法用來释放这个对彖所占的内存(包括成员变量)和其它资源。不要使用dealloc方法来管理稀缺资源,比如文件,网络链接等。因为由于bug或者程序意外退111,dealloc方法不能保证一定会被调川。AccessorMethods和内存管理Access

5、orMethods,也就是对象的property(属性)的getter和setter方法。显然,如果getter返回的対象已经被运行环境回收了,那么这个getter的返凹值是毫无意义的。这就需要在setterObjective-C提供了三种内存管理方式:manualretain-release(MRR,手动管理),automaticreferencecounting(ARC,自动引用计数),garbagecollection(垃圾冋收)□iOS不支持垃圾回收;ARC作为苹杲新提供的技术,苹果推荐开

6、发者使用ARC技术來管理内存;这篇笔记主耍讲的是手动管理。内存管理的目的是:1.不要禅放或者覆盖还在使用的内存,这会引起程序崩溃;2.释放不再使用的内存,防止内存泄iOS程序的内存资源是宝贵的。MRR手动管理内存也是基于引用计数的,只是需要开发者发消息给某块内存(或者说是对象)来改变这块内存的引用计数以实现内存管理(ARC技术则是编译器代替开发者完成相应的工作)。一块内存如果计数是零,也就是没有使用者(owner),那么objective-C的运行环境会自动冋收这块内存。objective-C的内

7、存管理遵导下面这个简单的策略:注:文档中把引用计数加1的操作称为“拥冇”(own,或者takeownershipof)某块对象/内存;把引用计数减1的操作称为放弃(relinquish)这块对象/内存。拥何对象时,你可以放心地读写或者返回对象;当対象被所有人放弃时,objective-C的运行环境会回收这个対象。1.你拥有你创建的对象也就是说创建的对彖(使用alloc,new,copy或者mutalbeCopy筹方法)的初始引用计数是1。2.给对彖发送retain消息后,你拥有了这个对象3.当你不

8、需要使用该对彖时,发送release或者autorelease消息放弃这个对彖4.不要对你不拥有的对彖发送“放弃”的消息注:简单的赋值不会拥冇某个对象。比如:•••NSStringFame=person.fullName;•••上面这个赋值操作不会拥冇这个对彖(这仅仅是个指针赋值操作);这和C++语言里的某些基于引用计数的类的行为是冇区别的。想拥有一个objective-C对象,必须发送“创建”或者retain消息给该对象。dealloc方法dealloc方法用來释放这个对彖所占的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。