zoukankan      html  css  js  c++  java
  • oc基础-oc中单个对象的内存管理的一些基础知识

     

    1.堆:存放的是一些动态分配的对象/类,系统是不会自动回收这些内存的

    2.栈:存放的是一些临时的和局部变量,一旦不在作用域内,就会自动回收内存

    3.oc中回收堆中动态分配的对象的内存的机制:引用计数器

     引用计数器:在每个对象的内存中都有一个4个字节的引用计数器(int),每当对象被创建时,引用计数器的值就是1,当该值为0时,该对象的内存空间就被回收了

      调用对象的 retain  方法 会使得计数器数字 +1,同时返回对象本身

      调用对象的 release  方法 会使得计数器数值 -1

      调用对象的 retaincount 方法 会返回当前对象的引用计数器的值

    4.当对象被回收时,系统还会自动调用dealloc 方法(是一个对象方法),在该方法中释放资源。通常我们都会在类中重写该方法,并且在方法中调用父类的dealloc

       代码:[super dealloc] ,并且是方法的最后一句。

    5.僵尸对象:当引用计数器数值是0时,即内存就已经被回收,变成不可用的了对象

    6.野指针:指向僵尸对象的指针

    7.空指针:当指针所指向的地址为0时(指针对象=nil 赋值为空指针),通常一旦引用计数器为0就要执行该操作

    8.通常对象被回收后,在利用非空指针指向对象,会报野指针错误, EXC_BAD_ACCESS  (即访问了一块坏地址)

    9.一旦指针变成空指针,那么再用指针操作方法,就不会有任何效果,同时也不会报错(实质:不会像类发送任何的消息)

    10.oc中没有空指针错误的。

    11.如果通过alloc ([[类 alloc] init])、new ([类 new] )或者[mutable]copy创建一个对象,那么必须调用该对象的release方法

    12.谁调用的retain方法,那么谁就必须调用release方法

    注:慎重使用retain 和release 方法,一旦出错,会导致内存泄露。

  • 相关阅读:
    如何优雅地结束线程的生命周期
    线程的interrupt()
    线程的join()方法
    守护线程Daemon
    使用多线程模拟一个银行叫号窗口
    多线程介绍
    十八、MySQL 数据排名查询某条数据是总数据的第几条
    spring cloud stream整合
    036线程进程(重要)
    035server端并发聊天
  • 原文地址:https://www.cnblogs.com/hui1107464497/p/4498187.html
Copyright © 2011-2022 走看看