Objective-C 内存管理

Objective-C中,内存对象分二类:

1) 值类型,如 int、float、struct等基本数据类型;

2) 引用类型,通常是指继承自NSObject类的OC对象;

值类型在栈中,由系统自动管理,而引用类型在堆上,需要我们自己手工进行管理

OC中提供了二种内存管理机制:

1) 手动引用计数 MRC (Mannul Reference Counting);

2) 自动引用计数 ARC (Automatic Reference Counting);

主要区别体现在,我们写代码的时候需要自己手动添加retain/release这样的代码

手动引用计数

有二对关键词:

1) alloc 与  release

2) retain 与 release

原则上:谁alloc谁就负责release,谁retain谁负责release

alloc 用来创建对象,创建完成后,引用计数 +1,只调用一次

retain 使引用计数 +1,可多次调用

release 使引用计数 -1,可多次调用

通常属性retainCount,可知道一个对象当前被引用的数量,当引用计数为0时,说明此对象没有被引用,它会被系统从内存中销毁,销毁之前会调用对象的dealloc

自动引用计数

在该模式下,不允许使用retain、release、retainCount等方法,并且如果对象实现了dealloc方法时,不允许调用[super dealloc]方法。

该模式下转而替代属性(property)的修饰词为strong、weak,相当于手动引用计数下的retain、assign

属性修饰符由三部分组成, @property(原子性, 存取控制性, 内存管理)

原子性:atomic(默认值)、nonatomic

存取控制性:readwrite(默认)、readonly

内存管理:assign(默认)、retain,ARC中建议使用strong、weak进行替代

copy 与strong类似,但区别在于它是对生成的副本拥有所有权而不是传入的对象

autorelease这里没讲,深拷贝和浅拷贝这里也没讲,属性更没有具体深入提,这些点如果想真正搞清楚,都可以单独写一篇文章详解

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

字符串留用与字符串池

字符串相等性检查是应用程序常见的操作,于此同时,这也是一种严重损害性能的操作.执行序号(字符串的二进制)相等行检查时,CLR会进行以下操作:

9520
来自专栏Pythonista

python中的函数

初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变...

16140
来自专栏转载gongluck的CSDN博客

c++ 中__declspec 的用法

c++ 中__declspec 的用法 语法说明: __declspec ( extended-decl-modifier-seq ) 扩展修饰符: ...

1K70
来自专栏java技术学习之道

一张图搞定Java原型模式

18550
来自专栏微信公众号:Java团长

Java堆和栈的区别

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作...

26230
来自专栏coolblog.xyz技术专栏

Dubbo 源码分析 - 自适应拓展原理

我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心。Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,...

12020
来自专栏ShaoYL

iOS循环引用

30650
来自专栏IT探索

g++&&gcc

3.C++:在构造函数中,当使用初始化列表来初始化成员变量时,如果初始化顺序与定义成员变量的顺序不一致,当使用-Wreorder选项时,会重新调整顺序初始化顺序...

7810
来自专栏進无尽的文章

编码篇-iOS程序中的内存分配 栈区堆区全局区等相关知识

在计算机的系统中,运行的应用程序中的数据都是保存在内存中,不同类型的数据,保存的内存区域不同。内存区域大致可以分为:栈区、堆区、全局区(静态区)、文字常量区、程...

22220
来自专栏流柯技术学院

Jmeter函数组件开发

在eclipse新建项目,导入jmeter目录下\lib\ext目录中的的ApacheJMeter_core.jar,继承AbstractFunction类。

10910

扫码关注云+社区

领取腾讯云代金券