为什么要进行内存管理?
由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。
OC内存管理方式?
OC的内存管理不同于其他高级语言如C#、Java都是通过垃圾回收机制,ObjC内存管理采用引用计数机制。
管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。
什么是引用计数?
引用计数机制:在ObjC中每个对象内部都有一个与之对应的整数(retainCount),叫“引用计数器”,当一个对象在创建之后它的引用计数器为1,当调用这个对象的alloc、retain、new、copy方法之后引用计数器自动在原来的基础上加1(ObjC中调用一个对象的方法就是给这个对象发送一个消息),当调用这个对象的release方法之后它的引用计数器减1,如果一个对象的引用计数器为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象。
什么是自动引用技术?
自动引用计数:指内存管理中对引用采取自动计数的技术。苹果官方说明如下:在Objective-C中采取Automatic Refrence Counting(ARC)机制,让编译器来进行内存管理。“在LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码”换言之,满足以下条件无需手动输入retain和release代码了。
1.使用Xcode4.2以上版本;
2.使用LLVM编译器3.0或者以上版本;
3.编译器选项中设置ARC为有效。
满足以上条件,编译器将自动管理内存。      
注?若需要在Xcode中关闭ARC:项目属性—Build Settings--搜索“garbage”找到Objective-C Automatic Reference Counting设置为No即可。
内存管理原则?
原则1  

只要还有人在使用某个对象,那么这个对象就不会被回收;

只要你想使用这个对象,那么就应该让这个对象的引用计数器+1;

当你不想使用这个对象时,应该让对象的引用计数器-1;

原则2  谁创建,谁release

(1)如果你通过alloc,new,copy来创建了一个对象,那么你就必须调用release或者autorelease方法

(2)不是你创建的就不用你去负责

原则3  谁retain,谁release

只要你调用了retain,无论这个对象时如何生成的,你都要调用release

总结:有始有终,有加就应该有减。曾经让某个对象计数器加1,就应该让其在最后-1.

转载于:https://www.cnblogs.com/echo-imax/p/4576757.html

Objective-C 内存管理机制相关推荐

  1. 【精华】详解Qt中的内存管理机制

    前言 内存管理,是对软件中内存资源的分配与释放进行有效管理的方法和理论. 众所周知,内存管理是软件开发的一个重要的内容.软件规模越大,内存管理可能出现的问题越多.如果像C语言一样手动地管理内存,一会给 ...

  2. C++中运行一个程序的内存分配情况及qt中的内存管理机制

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一 ...

  3. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...

  4. 什么是 Python 的 「内存管理机制」?

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  5. python中内存管理机制一共分为多少层_python 内存管理机制

    内存管理机制 ​python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它 ​Python的内存管理机制:引入计数.垃圾回收.内存池机制 ...

  6. JVM内存管理机制线上问题排查

    本文主要基于"深入java虚拟机"这本书总结JVM的内存管理机制,并总结了常见的线上问题分析思路.文章最后面是我对线上故障思考的ppt总结. Java内存区域 虚拟机运行时数据区如 ...

  7. 浅析java内存管理机制

    内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和java语言内存管理机制的不同的基础上,浅析java中 ...

  8. 内存分段分页机制理解_深入理解虚拟机,JVM高级特性-自动内存管理机制

    什么是自动内存管理机制? 对于java程序员来说,有一点是要比C/C++程序员要方便的,那就是程序在运行时,java程序不需要为每一个对象其编写对应的释放内存的代码,JVM虚拟机将为你在合适的时间去释 ...

  9. 【Python基础】什么是Python的 “内存管理机制”

    什么是内存管理器(what) Python作为一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存 ...

  10. Redis的持久化机制与内存管理机制

    1.概述 Redis的持久化机制有两种:RDB 和 AOF ,这两种机制有什么区别?正式环境应该采用哪种机制? 我们的服务器内存资源是有限的,如果内存被Redis的缓存占满了怎么办?这就要看Redis ...

最新文章

  1. 《算法的乐趣》----第二章算法设计基础(笔记一)
  2. FCOS:全卷积一阶段Anchor Free物体检测器,多种视觉任务的统一框架
  3. R 包 pathview 代谢通路可视化
  4. PyTorch学习笔记——pytorch图像处理(transforms)
  5. storyboard搭建项目_Storyboard 快速搭建UICollectionView
  6. Python入门 学习笔记
  7. 第二次作业——个人项目实战
  8. 头像裁剪_课堂裁剪|19级油画班油画头像写生作品
  9. Github使用1-入门
  10. 一份不大的救命文档,一场时间与生死的接力
  11. 聊聊ribbon的超时时间设置
  12. WCF简单教程(6) 单向与双向通讯
  13. es6 数组合并_JavaScript学习笔记(十九)-- ES6
  14. Ubuntu系统下环境变量那些事儿
  15. JAVA 程序员需要用到 10 个测试框架和库
  16. 初级篇第三期:初识UI
  17. matlab 报童 泊松分布函数,数学建模和工科数学分析(2)
  18. vue 实现打字机效果
  19. 2015北京科技大学869计算机组成原理考试大纲,2014年北京科技大学869计算机组成原理考研真题...
  20. 网易2017内推笔试题--小易老师的疯狂数列

热门文章

  1. Windows Azure Cloud Service (23) 使用Full IIS模式部署多站点和虚拟目录
  2. Matplotlib 中文用户指南 4.6 编写数学表达式
  3. 利用nvm管理Node的版本
  4. inline-block 和 float 的区别
  5. KVM安装Win系列虚拟机学习笔记
  6. 使用MONGODB 集群的OPLOG 日志进行数据恢复
  7. MONGODB 集群 配置及 客户端PHP 连接
  8. Android AsyncTask用法介绍
  9. Java数据结构—基本数据类型
  10. JDBC的入门案列以及JDBC的对事务的管理