从零开始学iOS开发之内存管理

一、OC为什么需要进行内存管理

  • 每个C语言程序员都会遇到与内存相关的错误,这种错误是灾难性的。而使用Java和脚本语言的程序员则不需要考虑此类问题:这些语言的的内存管理是自动进行的。
  • 必须确保在需要的时候分配内存,在程序运行结束时释放占用的内存。如果只分配,而不释放内存,则会发生内存泄露(leak memory):程序的内存占用量不断增加,最终内存会被耗尽,并导致程序崩溃。
  • 不要使用任何刚释放的内存,否则可能误用陈旧的数据,从而引发各种错误,而且如果该内存已经加载了其他数据,将会破坏这些新数据。
    引申问题:如何分配使用内存,如何防止内存泄露,如何释放被占用的内存

二、对象生命周期

程序中的对象有生命周期。对象的生命周期包括诞生(通过alloc或new方法实现)、生存(接收消息并执行操作)、交友(通过复合以及向方法传递参数)以及最终死去(被释放掉)。当生命周期结束时,它们的原材料(内存)将被回收以供新的对象使用。
引申问题:什么是对象、对象的诞生、如何使用对象

  • 1、引用计数
    怎么知道对象生命周期结束了呢?Cocoa采用了一种叫做引用计数(reference counting)的技术,有时也叫做保留计数(retain counting)。每个对象都有一个与之相关联的整数,被称作它的引用计数器。当某段代码需要访问一个对象时,该代码就将该对象的引用计数器值加1,表示要访问该对象,当这段代码结束对象访问时,将对象的保留计数器减1,表示它不再访问该对象。当保留计数器的值为0时,表示不再有代码访问该对象了,因此它将被销毁,其占用的内存被系统回收以便重用。
    当使用alloc、new方法或者通过copy消息(接收到消息的对象会创建一个自身的副本)创建一个对象时,对象的保留计数器值被设置为1。要增加对象的保留计数器的值,可以给对象发送一条retain消息。要减少的话,可以给对象发送一条release消息。当一个对象因其保留计数器归0而即将被销毁时,Objective-C会自动向对象发送一条dealloc消息。你可以在自己的对象中重写dealloc方法,这样就能释放掉已经分配的全部相关资源。一定不要直接调用dealloc方法,Objective-C会在需要销毁对象时自动调用它。
    要获得保留计数器当前的值,可以发送retaincount消息。下面是retain、release、retaincount的方法声明。
    -(id)retain;
    -(oneway void)release;
    -(NSUInteger)retaincount;
    增加对象的保留计数器的值并要求对级字,,的高时、以“个、深具关共:i消息的同时进行retain两
    Idek:2]:表示要。求他时的等等一,1我5的成k某种操作。例如;[[ar retainl setrib.h
    本章的第一个项目是RetaincossearA ehi'ohtt triANTJrsetfire操作。
    个ietainrracker类的对象,该对的外封我自 otiCount-1项目文件夹内。以下程序创建了
    it erfceRetainracker:N5Object
    eend // RetainTracRe"" rwuect
    ea的p.tbtentation Retainfracker
    (id)init
    ,self retaincourtiy"t Motog (e"init:Retain count of ani,.
    retyrn.(se1f);
    【Vhid)dea11oc
    Mtog (e"dealloc ca11ed. avo p
    d高年nes9Poc ca11ed.Bye lire."),
    super dea11oc];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 5,497评论 1 3
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 6,070评论 1 16
  • 内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective-C中,也被看作是在众...
    蹲瓜阅读 8,471评论 1 8
  • 内存管理的基本范围和概念. 程序运行过程中药创建大量的对象, 和其他高级语言类似,在ObjC中对象存储在堆区,程序...
    ValienZh阅读 4,394评论 0 2
  • 内存管理 ARC处理原理 ARC是Objective-C编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做...
    b485c88ab697阅读 13,836评论 3 47

友情链接更多精彩内容