内存管理(简介,引用计数器)

移动设备的内存及其有限,每个app所占的内存是有限制的

下列行为都会增加一个app的内存占用

1,创建一个OC对象

2,定义一个变量

3,调用一个函数或者方法

当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的空间。比如回收一些不需要使用的对象,变量等。

如果app占用内存过大:

系统可能会强制关闭app,造成闪退现象,影响用户体验。

所谓内存管理,就是对内存进行管理,涉及的操作有:

分配内存:比如创建一个对象,会增加内存占用

清楚内存:比如销毁一个对象,能减小内存占用

内存管理的管理范围

1,任何继承NSObject对象

2,对其他非对象类型无效(int,char,float,double,struct,enum等)

只有OC对象才需要进行内存管理的本质原因:

1,OC对象存放于堆里面。(里面内存动态回收的)

2,非OC对象一般放在栈里面(栈内存会被系统自动回收)

Car *car = [[Car alloc]init];

car为指针变量  再栈区,[Car alloc]  分配内存空间,在堆区分配空间

系统是如何判断什么时候需要回收一个对象所占用的内存?

根据对象的引用计数器。

什么是引用计数器?

每个OC对象都有自己的引用计数器。它是一个整数。

从字面上,可以理解为“对象被引用的次数”,也可以理解为:它表示有多少人正在用这个对象。

每个OC对象内部都有4个字节的存储空间来存放引用计数器。

时间: 2024-11-03 22:48:28

内存管理(简介,引用计数器)的相关文章

黑马程序员-内存管理之引用计数器

1.引用计数器 每种语言都有自己的内存管理机制,当然OC也不例外.当一个对象创建的时候,系统在堆中给这个对象分配了一块存储区域,这个对象被栈中的对象指针所指向,当没有任何指针指向这个对象的时候,系统怎么释放这块对象内存呢?OC中是用引用计数器来实现的.每一个对象拥有一个引用计数器(占四个字节),当对象被创建时,自带的引用计数器的值就为1了.给对象发送retain消息时,对象的引用计数器就做+1操作,表示有指针拥有这个对象,发送release消息时引用计数器做-1操作,表示某个指针不在拥有这个对象

Objective-C内存管理之引用计数

初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存管理这一部分说的非常简单,只有三条准则: 当你使用new.alloc或copy方法创建一个对象时,该对象的保留指针为1,当不再使用该对象的时候,你应该想该对象发送一条release或autorelease消息,这样,该对象在其寿命结束时将被销毁. 当你通过其他方法获得一个对象时,假设该对象的保留计数

Python内存管理及引用计数

作为一门动态语言,python很重要的一个概念就是动态类型,即对象的类型和内存占用都是运行时确定的.(Why?)运行时,解释器会根据语法和右操作数来决定新对象的类型.动态类型的实现,是通过引用和对象的分离达到的.对象是存放在内存中的数据实体,而引用(reference)可以理解成一个封装好的指向对象的指针.不过操作更加方便和安全.就像C++中的引用是对指针操作的简化和封装一样.在python中,内存的管理,即分配与回收,都是由python解释器来做的,程序员不需要关心太多.或者,也可以把引用理解

动态内存管理(引用计数)

c++的动态内存管理是非常重要的,操作不当很容易引起内存泄漏, 下面我详细写了一些内存管理该注意的地方,包括引用计数的实现 深拷贝浅拷贝 #include <iostream>using namespace std; class String{public: String()  :_str(new char[1]) {  *_str = '\0'; } String(char* str)  :_str(new char[strlen(str)+1])  //开辟一段新空间给_str {  st

内存管理简介

1.内存管理的重要性 移动设备的内存极其有限,每个app所能占用的内存是有限制的 下列行为都会增加一个app的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等 如果app占用内存过大, 系统可能会强制关闭app, 造成闪退现象, 影响用户体验 2.什么是内存管理 如何回收那些不需要再使用的对象? 那就得学会OC的内存管理 所谓内存管理, 就是对内存进行管理,

Windows内存管理简介:

1:连续的内存空间分配: (1)单一连续分配:只能单作业,单任务运行: 分为系统和用户区:用户区是指除了系统需外左右的内存,由于单用户,单任务,要不都被占用,要不全空   (2):固定空间分配:固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业.当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环. 分区大小相等:用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性. 分区大小不等:划分为含有多个

JVM笔记2-Java虚拟机内存管理简介

java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区:运行时常量池,已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 2.java堆:存储对象实例 2.线程独占区,是每一个线程都有自己独立的虚拟机栈,本地方法栈,程序计数器. 1.虚拟机栈:存储方法运行时所需的数据,成为栈帧. 2.本地方法栈:为JVM所调用到的native即本地方法服务. 3.程序计数器:记录当前线程所执行到的字节码的行号. 原文地址:https

iOS内存管理机制

概述 我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没有得到及时释放那么就会占用大量内存.其他高级语言如C#.Java都是通过垃圾回收来(GC)解决这个问题的,但在OjbC中并没有类似的垃圾回收机制,因此它的内存管理就需要由开发人员手动维护.今天将着重介绍ObjC内存管理: 引用计数器 属性参数 自动释放池 引用计数器 在Xcode4.2及之后的版本中

OC 内存管理:MRC与ARC

内存中的五大区域: 栈区,堆区,BBS段,数据段和代码段,其中除了堆区以外,其他区域的内存管理由系统自行回收 OC对象是存储在堆区的,所以OC的内存管理主要是对”堆区中的OC对象”进行管理 内存管理中的几个概念: ->引用计算器:既retainCount,每个OC对象内部都有1个8字节空间用来存储retainCount,表示有多少”人”正在使用; 对象刚被创建时,默认计数值就为1,当计数值为0时,系统会自动调用dealloc方法将对象销毁 引用计数器的用法:给对象发送相应的技术操作来改变计数器的