美文网首页
OC内存管理(一)

OC内存管理(一)

作者: 我是卖报的小行家 | 来源:发表于2020-05-10 11:07 被阅读0次

一。
1.内存管理重点
1).当多一个人使用这个对象的时候,应该为这个对象发送retain消息
2).当少一个人使用这个对象的时候,应该为这个对象发送release消息
2.ARC机制下,retain,release,dealloc这些方法无法调用
3.内存管理原则
1).有对象的创建,就要匹配一个release
2).retain的次数和release的次数匹配
3).谁用谁retain,谁不用谁release,谁负责retain,谁就负责release
4).有始有终,有加有减。有retain,就用该匹配一个release达到平衡。

二。
1.野指针
c语言中的野指针:定义一个指针变量,没有初始化,这个指针变量的值是一个垃圾值,指向一块随机的空间,这个指针就叫做野指针。
OC当中的野指针:指针指向的对象已经被回收了,这样的指针就叫做野指针。
2.对象回收的本质
内存回收的本质:
申请一个变量,实际上就是向系统申请指定字节数的空间,这些空间系统就不会再分配给别人了。当变量被回收的时候代表变量占用的字节空间从此以后系统可以分配给别人使用,但是字节空间中存储的数据还在。

回收对象:

对象回收指的是对象占用的控件可以分配给别人。
当对象占用的空间没有分配给别人之前,对象数据还在。

3.僵尸对象
一个已经被释放的对象,但是这个对象所占用的空间还没分配给别人,这样的对象叫做僵尸对象。
通过野指针访问僵尸对象时候,有可能有问题(当僵尸对象中占用的空间已经分配给别人的时候),有可能没问题(当僵尸对象中占用的空间还没分配给别人的时候)

4.只要对象成为了僵尸对象,无论如何都不允许访问。所以希望如果访问的是僵尸对象,无论如何要报错,这个时候OC有一个僵尸对象的实时检查机制可以去实现
操作步骤:
1).


截屏2020-05-10 上午10.52.58.png

2).


截屏2020-05-10 上午10.54.28.png

5.为什么不默认打开僵尸对象检测
一旦打开,那么每访问一个对象的时候,都会检查这个对象是否为一个僵尸对象,这样会很消耗性能。

6.如何避免僵尸对象错误
1).当一个指针成为野指针以后,将这个指针的值设置为nil
当一个指针的值为nil,通过这个指针去调用对象的方法(包括点语法)的时候,不会报错,只是没有任何反应,但是如果通过直接访问属性,就会报错

相关文章

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS五大块知识总结之内存管理

    1.1 管理的原因 只有OC对象才需要管理内存,非OC对象(如:char、int、folat)则不需要管理内存的本...

  • iOS面试复习1——内存

    一、内存管理(MRC) (一) 管理对象 管理对象:OC对象 原因: 1、OC对象存放于堆里面 2...

  • iOS 中堆和栈的区别以及冒泡排序

    在引入堆和栈之前,先要知道,iOS中的内存管理范围: OC对象需要进行内存管理,非oc对象不需要进行内存管理,比如...

  • OC的内存管理

    最近系统地复习了OC的内存管理,所以总结下. OC是通过引用计数(reference count)来管理内存.自...

  • 内存管理

    OC中的内存管理是通过引用计数技术实现的,所谓内存管理就是在合适的时机创建和销毁一个对象。 OC对象内存管理之MR...

网友评论

      本文标题:OC内存管理(一)

      本文链接:https://www.haomeiwen.com/subject/vlmknhtx.html