美文网首页OC学习
Objective-C_内存管理基础

Objective-C_内存管理基础

作者: ARU | 来源:发表于2015-10-27 23:11 被阅读108次

说起内存管理,看似老生常谈,但是真正掌握内存管理并不简单。小伙伴们要加油了。

Objective-C的内存管理机制与Java那种全自动的垃圾回收机制是不同的,它本质上还是C语言中的手动管理方式,通过引用计数机制管理内存。其内存管理方法分为MRC和ARC:

  • MRC:手动管理内存,早期代码都是使用这个方式。
  • ARC:自动管理内存,iOS5之后苹果提供的一种自动管理内存的方式,较好的提升了开发效率(本质还是基于MRC的)。

引用计数:所谓引用计数,即在对象内部保存一个数字(retain count),表示该对象呗引用的次数,当计数为0时系统会释放内存中的对象。

那么哪些操作能够引起计数 +1 或者 -1呢?

  • 引用计数 +1:
  • alloc:创建对象时调用此方法,为对象开辟内存空间,对象引用计数 +1。
  • copy:拷贝一个对象,返回新对象,被拷贝区域引用计数不变,新的内存区域引用计数为1。
  • retain:获得对象的所有权,引用计数 +1。
  • 引用计数 -1:
  • release:释放对象的所有权,引用计数 -1,计数为0时对象被释放。
  • autorelease:自动释放(在未来的某个时机释放)。
  • dealloc:在对象的引用计数为0的时候调用,销毁所开辟的内存空间,有开辟就要有销毁。

注意 !

  • autorelease是一个特别的方法,实际上是把release消息交给一个叫做自动释放池(autorelease pool)的东西延迟执行,即在系统觉得需要清理的时候,才会调用release方法。
  • copy拷⻉,一般用于 NSString. 分为深拷贝和浅拷贝,深拷⻉拷贝的是对象(内容), 浅拷贝拷贝的是指针(地址)。

内存管理的原则

《总的原则:谁申请(包括retain)谁释放,引用计数最终平衡》

  • 凡是通过retain,alloc,copy等手段获得了所有权的对象,都必须在你不使用他的时候调用release,autorelease等手段来释放对它的所有权。
  • 在一定的代码段内,对同一个对象所作的copy,alloc和retain操作次数应当与release和autorelease操作的次数相等。
  • 可以在类的dealloc方法中释放你所战友的实例变量。
  • 对于便利构造器和访问器来说,并没有通过前面提到的手段获得对象的所有权,因此在这些情况下无需对对象进行额外的释放操作,切记!

先到这里,欢迎补充纠正
不定期更新

点我 , 点我

相关文章

  • Objective-C_内存管理基础

    说起内存管理,看似老生常谈,但是真正掌握内存管理并不简单。小伙伴们要加油了。 Objective-C的内存管理机制...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • OC语法_IOS内存管理

    目录: 1、内存的定义 2、内存管理的基础概念 3、IOS系统中的内存管理 1、内存的定义 1.1. 内存是计算...

  • 第021篇:内存管理与拷贝

    1、内存管理 1.1、内存管理基础(C语言)  内存分为栈区间和堆区间,栈区间的内存是系统自动申请自动释放;堆上的...

  • 内存管理基础

    程序可执行文件的结构 一个程序的可执行文件在内存中的结果,从大的角度可以分为两个部分:只读部分和可读写部分。只读部...

  • 内存管理基础

    1 内存及其作用 内存:是被划分成一个个小的存储单元用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理...

  • Objective-C 内存管理基础

    前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...

  • Java基础-JVM内存管理-内存管理

    Java工程师知识树[https://www.jianshu.com/p/db77d19a25f6] / Ja...

  • Swift 内存管理

    Swift 内存管理 [TOC] 前言 本文将介绍一下Swift中的内存管理,关于内存的一些基础知识可以参考我以前...

  • Android 内存管理机制

    本文主要包括三大部分内容:内存管理基础:从整个计算机领域简述主要的内存管理技术。Linux的内存管理机制:Andr...

网友评论

  • Hello_kid:您好,property属性在括号里写copy或者mutablecopy 等关键字和一个对象调用copy或者mutablecopy方法有区别吗?

本文标题:Objective-C_内存管理基础

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