Objective-C_内存管理基础

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

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方法中释放你所战友的实例变量。
  • 对于便利构造器和访问器来说,并没有通过前面提到的手段获得对象的所有权,因此在这些情况下无需对对象进行额外的释放操作,切记!

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

点我 , 点我

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...
    老板娘来盘一血阅读 3,774评论 25 36
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,003评论 1 16
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 5,758评论 8 119
  • 内存管理是程序在运行时分配内存、使用内存,并在程序完成时释放内存的过程。在Objective-C中,也被看作是在众...
    蹲瓜阅读 3,168评论 1 8
  • iOS开发中, 之前一直使用swift, 因此对于Objective-C的内存管理机制长期处于混乱的一知半解状态....
    icetime17阅读 866评论 1 8