zoukankan      html  css  js  c++  java
  • QF——OC内存管理详解

    堆的内存管理:

      我们所说的内存管理,其实就是堆的内存管理。因为栈的内存会自动回收,堆的内存需要我们手动回收。

      栈中一般存储的是基本数据类型变量指向对象的指针(对象的引用),而真实的对象存储在堆中。因为栈结构的缘故,它是严格地存储在栈数据结构中的,其中数据的生命周期结束后内存都会被回收。此时,对象的引用已经被回收了,但是对象还存在于堆中,这便造成了内存泄露

    引用计数器:(ratainCount)

      每个对象都有引用计数器,在每个对象内部都有块内存存储它。顾名思义,引用计数器代表该对象被引用的次数,即有多少地方在使用该对象。

      当一个对象刚被创建时,引用计数器为1;每多一个引用,引用计数器就+1 (retain);每少一个引用,引用计数器就 -1(release)。

      经过一番增减后,当引用计数器等于0时,该对象就被销毁,所占内存被回收。(自动调用dealloc方法,一般需重写它,在里面释放一些资源。)

      注意:retainCount=0是判断对象是否该销毁的唯一依据

      对象被销毁后,就不能再访问它了,不然会报野指针错误。

    内存管理的原则:

      有创建就有销毁,谁创建谁销毁;有retain就有release,谁retain就谁release。

    待续。。。

    有几篇博客总结得很详细:

      

      OC内存管理

      OC中栈和堆

      堆内存碎片问题

  • 相关阅读:
    委托、Lamda表达式
    springcloud-feign的hystrix支持
    springcloud-断路器hystrix
    Java原子性、可见性、内存模型
    volatile特性
    synchronized实现可见性
    Js四则运算精度问题处理
    docker 简单安装java web项目
    elasticsearch 分布式集群搭建
    logstash-input-jdbc同时同步多个表
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4322101.html
Copyright © 2011-2022 走看看