issue 21 :内存管理

发表于 2018-09-09   |   分类于 Objectiv-C 课程

笔记部分

  1. 当APP所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。
  2. 管理范围:任何继承了NSOject的对象,对其他基本数据类型(int、char、float、double、truct、enum等)无效
  3. Object-C内存管理方式有三种:手动引用计数(MRC,Manual Reference Count)、自动引用计数(ARC,Automatic Reference Count)、自动垃圾回收
  4. 每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人正在使用这个OC对象
  5. 每个OC对象内部专门有4个字节的存储空间来存储引用计数器
  6. 引用计数器的操作

    1. 给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
    2. 给对象发送一条release消息,可以使引用计数器值-1
    3. 可以给发送对象发送retainCount消息获得当前的引用计数器值

7.对象的销毁

    1. 当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收
    2. 当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
    3. 一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言
    4. 一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用
    5. 不要直接调用dealloc方法
    6. 一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序崩溃
    7. 基本方法

      1. retain :计数器+1,会返回对象本身
      2. release :计数器-1,没有返回值
      3. retainCount :获取当前的计数器
      4. dealloc:当一个对象要被回收的时候,就会调用
    8. 基本概念

      1. 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用
      2. 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)
      3. 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错
    1. 浅拷贝和深拷贝
      1.浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间;当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。

      1. 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
      2. copy 和 retain 的区别: copy 是创建一个新对象,retain 是创建一个指针,引用对象计数加一。 copy属性标识两个对象内容相同,新的对象 retain count 为1, 与旧有对象引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
    2. Key Value Coding: 存取类属性, 通过字符串来访问对象属性。KVC
      10.Key Value Observer:通过KVC的方式修改被观察者的属性时,主动通知观察者kvo

    思考

    1. 当你需要保留时,使用基本类型数据。但是要注意内存泄漏

    参考链接

    源文件

    • Objective-C高级语法知识大纲(2018-07-25).key

    发表新评论

    © 2019 Powered by Typecho & Theme 豫ICP备15027577号