• 内存管理


    1.为什么要进行内存管理

    • 程序运行时的内存资源是有限的,object-c语言所编写的程序中需要实例化对象。
    • 对象是占用内存的,如果创建了对象(分配了内存),而不去释放这些对象的内存,将会发生泄漏
    • 程序所使用的内存会随着 程序对象 的增加而不断怎加
    • 最终内存被耗尽只是就是程序崩溃之时
    • IOS系统为米一个程序分配了30M内存,程序使用内存超过20M会收到警告,超过30M 会吵嚷声程序
    • 管理范围:任何继承NSobjext的对象,对其他的基本数据类型无效

    2.对象的生命周期 

    • 程序中的对象具有生命周期包括以下几个时期

    -对象的初始化

    -对象接收信息

    -对象被释放

    • 如果对象不存在了,其所占用的内存应该交还给系统已被其他新的对象来使用
    • 采用引用计数器的技术得知一个对象的寿命是否结束

    3.引用计数器的操作方法

     

    • 当使用alloc、retain方法或者copy消息创建一个对象时,对象引用计数器,可以向对象发送retain消息
    • 如果要增加某个消息对象的引用计数器,可以向对象发送release或者autorelease消息
    • 如果想要获取某个对象当前引用计数器的值,可以向对象发送retaincount消息
    • 通 常我们没有必要去特地查询一个对象的retain count是多少。查询的结果常常会出乎意料。你不清楚framework里面的其他对象对你感兴趣的这个对象进行了多少retain操作。在debug 内存管理的问题时候,你只要关注保证你的代码符合所有者规则即可。
    • 所谓的所有者规则,也就是谁拥有谁释放,或者是谁创建谁释放,通俗的来讲就是,在哪里让其+1了,就要在相应的地方-1,如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法,不是你创建的就不用你去负责

    5.引用计数

    • 每一个对象有一个整数值,这个整数值与对象本身关联,称为引用计数器
    • 当某写地方需要使用这个对象时,可以将计数器加1,表示需要使用这个对象
    • 使用完毕后,将该对象的引用计数器值减1,表示对象已经使用完毕
    • 如果引用计数器值为0时,表明没有地方在使用该对象,这时系统将销毁该对象,其所占用内存被收回,以便重用

     

     

     

     

  • 相关阅读:
    cpp:' data_type * '被视为一个数据类型
    c_cpp: 指针的双重赋值
    python3:面向对象之成员变量(成员变量赋值为元组、字典)
    shell:delete_executable_file 删除当前文件夹的可执行文件(linux)
    php:面向对象之成员变量(数组)
    php:输出关联数组特定范围的数据
    cpp: 指针和引用(class & object)
    解决 raw.githubusercontent.com 无法访问的问题
    容器监控
    wsl2 ubuntu 安装k8s
  • 原文地址:https://www.cnblogs.com/banchuangshuying/p/4929948.html
Copyright © 2020-2023  润新知