专栏首页游戏杂谈Objective-C 内存管理

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 条评论
登录 后参与评论

相关文章

  • as3+php上传图片的三种方式

    1)设置FlashDevelop使用flash player10(debug版本,因为有一个demo使用了本地预览)

    meteoric
  • as3的InteractivePNG例子

    在as3中很多时候需要只能选中png中可视区域,即透明区域“感觉可以穿透”。两张png重叠的时候,鼠标可以分别响应它们的事件。如下图所示:

    meteoric
  • 一个flash鼠标特效

    有点像“水果忍者”划过屏幕时的动画,在每次按住鼠标左键不放然后拖动鼠标并释放,会出现动画。动画我参考别人的代码,然后在显示特效的时候使用了不同的颜色。

    meteoric
  • Guava 源码分析(Cache 原理【二阶段】)

    在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。

    纯洁的微笑
  • 联邦航空局批准亚马逊使用无人机送货

    该公司周一透露,美国联邦航空管理局(Federal Aviation Administration)向这家在线零售巨头颁发了135部分认证,允许亚马逊Prime...

    用户8054111
  • 请讲讲vector和list的区别和应用

    海盗船长
  • APM工具寻找了一圈,发现SkyWalking才是我的真爱

    SkyWalking 支持多种来源和多种格式的 traces / metrics 数据,包括:

    码农小胖哥
  • 曲线救国!通过VirtualBox让Windows Server 2008 R2也用上蓝牙

    大家知道,Windows Server 2008 R2并未内置蓝牙驱动。不过,如果你的系统是他的话,而且现在手机都有蓝牙,总不能每次传输东西都用数据线吧,白白浪...

    williamwong
  • nodejs使用redis发布订阅

    一般来说,发布与订阅(又称为pub/sub)的特点是订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字...

    无邪Z
  • Android 蓝牙操作详解

    1.启用蓝牙并使设备处于可发现状态        1.1 在使用BluetoothAdapter类的实例进操作之前,应启用isEnable()方法检查设备是否启...

    hbbliyong

扫码关注云+社区

领取腾讯云代金券