zoukankan      html  css  js  c++  java
  • 内存管理

    1、为什么进行内存管理

      提高手机流畅度

      在程序开发中,应该及时将不用的数据回收,合理分配和管理内存,以提高程序的运行效率

    规定运行起来的程序所占用的内存不得超过20m

    一旦超过 就会发送警告 ,如果app接到警告还没有进行处理的话,程序会闪退

    大部分闪退的原因都是因为内存没有管理好

    每个界面占用内存累计增加内存占用量

    2、哪些行为增加内存占用

      1)创建对象

      2)定义变量

      3)调用函数或者方法

      堆区,栈区,常量区,代码区...

      能够看到和控制的区域:堆区和栈区

    3、OC内存管理的范围

      管理任何继承自ONSObject的对象,对其它的基本数据类型无效

    对象类型是程序运行过程中动态分配的,存储在堆区内存管理主要是 对堆区的对象的内存管理

    一、内存管理的原理及分类

    1、内存管理的原理

      搞清楚两个概念:

      1)对象的所有权

      任何一个对象,都可能有一个或多个所有者

      如:person *p=[Person new];

      p就是对象的所有者

      Person *p1=p

      p1是p的所有者是对象的所有者

      任何自己创建的对象都归自己所有

      new/alloc/copy的方法创建对象,可以使用retain来获得一个对象的所有权

      2)引用计数器

      对象刚被创建时,默认计数值为1,当计数器的值变为0的时候,对象被销毁

      (通过retainCount方法可以打印对象引用计数器的值)

      MRC:手动内存管理

      ARC:默认环境为ARC:automatic Reference count 自动引用计数器

      怎么配置成MRC形式?

      target->Build Setting  automatic reference Counting (YES/NO)

      a、引用计数器作用:

      判断对象要不要被回收的依据

      b、对引用计数器的操作

      想要管理对象占用的内存,就要学会操作引用计数器

      1)常见操作:

        a、retain消息:计数器+1

        b、release消息:计数器-1

            原则:谁retain谁release

    2、内存管理

      1、野指针(僵尸对象):

      僵尸对象:已经被销毁的对象

      野指针:指向僵尸对象(不可用内存)的指针

      空指针:没有指向存储空间的指针(里面村的是nil也就是-)

      

      2、内存泄漏

      如果在程序结束后,对象没有被释放,则成为内存泄漏

      

  • 相关阅读:
    Python之MySQLdb
    Python 小方法
    Python文件打包
    禅道使用教程
    Linux命令
    安卓自动化测试monkey
    深入分析Java中的中文编码问题
    Linux命令搜索
    文件上传的类型选择控制
    MySql格式化日期函数
  • 原文地址:https://www.cnblogs.com/CityPe/p/6384567.html
Copyright © 2011-2022 走看看