美文网首页iOS
OC的内存管理

OC的内存管理

作者: 俊而不逊 | 来源:发表于2019-01-10 08:59 被阅读0次

1.内存管理:主要是OC的对象内存管理,基本数据类型不需要内存管理(由系统分配和回收),我们程序员要做的是管理堆内存

2.引用计数器(Reference Count),也叫保留计数(retain count),表示对象被引用的次数。一个简单而有效的管理对象生命周期的方式。


引用计数.png

3.内存管理黄金法则:谁创建,谁释放,谁引用,谁管理

iOS中的三种内存管理方式:MRC、ARC、自动释放池

iOS5之前: 是手动管理内存(MRC),当创建或引用一个对象的时候,需要向她发送alloc、copy、retain消息,当释放该对象时需要发送release消息,当对象引用计数为0时,系统将释放该对象,这是OC的手动管理机制(MRC)。

iOS5之后: ARC下的iOS项目几乎把所有内存管理事宜都交给编译器来决定,而开发者只需专注于业务逻辑。只是不再需要调用retain、release、autorelease;它编译时的特性,当你使用ARC时,在适当位置插入release和autorelease;它引用strong和weak关键字,strong修饰的指针变量指向对象时,当指针指向新值或者指针不复存在,相关联的对象就会自动释放,而weak修饰的指针变量指向对象,当对象的拥有者指向新值或者不存在时weak修饰的指针会自动置为nil。

如果使用alloc、copy(mutableCopy)或者retian一个对象时,你就有义务,向它发送一条release或者autorelease消息。其他方法创建的对象,不需要由你来管理内存。

向一个对象发送一条autorelease消息,这个对象并不会立即销毁, 而是将这个对象放入了自动释放池,待池子释放时,它会向池中每一个对象发送 一条release消息,以此来释放对象.

向一个对象发送release消息,并不意味着这个对象被销毁了,而是当这个对象的引用计数为0时,系统才会调用dealloc方法,释放该对象和对象本身它所拥有的实例。

详细的可以看这篇iOS开发--引用计数与ARC

自动释放池: 每个程序都会自动带着一个自动释放池,一个程序可以同时创建多个自动释放池

作用:将对象延迟释放

autorelease:当给一个对象发送了这个消息之后,对象不会被马上释放,会被统一的放入自动释放池一个数组中,在自动释放池结束的时候被统一释放.

注意:
autorelease与自动释放池联合使用
自动释放池可以嵌套调用

4.混编:

开发过程中难免会引用到别人的代码,有些是ARC写的,有些是MRC写的,那么要使用就得去设置一下

在MRC工程中采用ARC去编译某些用到的类:-objc-arc。
在ARC下的工程采用MRC去编译某些用到的类:-fno-objc-arc。

工程设置如下图


工程设置.png

可以参考内存管理基本原则这篇文章

相关文章

  • 内存管理

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

  • 内存管理

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

  • OC的内存管理

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

  • Lesson 0-1 Objective-C basic

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

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

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

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

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

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

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

  • OC的内存管理

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

  • OC关于在MRC模式下的内存管理学习

    内存管理 管理范围 任何继承NSObject的对象 只有OC对象才需要进行内存管理的本质原理 1.OC对象在堆中 ...

  • 内存管理

    内存管理的重要性。 不进行内存管理和错误的内存管理会造成以下问题。 内存泄露 悬挂指针 OC内存模型 内存管理是通...

网友评论

    本文标题:OC的内存管理

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