写点什么

Objective-C 中的自动引用计数

  • 2011-07-10
  • 本文字数:827 字

    阅读完需:约 3 分钟

近日,出现在 Clang 站点上的一篇文章探讨了对 Objective-C 中自动引用计数的需求。自动引用计数提供了一种类似于C++ auto 的服务,可以让对象自动参与到retain/release/autorelease 周期中而无需用户显示操纵对象。

Objective-C 使用了一种以约定为基础的引用计数。被持有的对象会被保留下来,这会增加其引用计数。当对象被释放时,其引用也会被释放。当保留的计数归零时,该对象就会被销毁。

为了使用工厂方法(会返回创建好的实例但却不会控制其生命周期的方法),Objective-C 提出了自动释放池的概念。他们是对象的局部栈列表,在处理循环结束时(通常是处理完事件队列中的某个事件时),该池就会被清空,这会减少列表中对象的引用计数。如果引用计数降为 0,那么对象就会被销毁。另一方面,如果对象还被循环处理中的其他代码所持有,那么该对象还可以供后续使用。

Objective-C 对于方法有一个非正式的命名约定以标识其用途。调用者希望能够控制诸如 init 与 new 所返回的对象。带有 with 的方法(如 NSString 的 stringWithFormat)会返回一个自动释放的对象。

Objective-C 2.0 向语言中添加了大量内容,如块与属性,他们具有自动的保持与释放语法。但借助于自动的引用计数,编译器现在可以推断出(这种情况数量不多,但应用却很广)应该在何处使用恰当的 retain/release 调用。

此外,如果编译器能够判明出在一对函数间的调用动作序列,那么就可以优化自动插入的 retain/release 调用。为了实现这一点,某些调用(如 init 与 new)就会被分配给类成员,这些新扩展可以给编译器一定的指示。但这么做的副作用就是调用未被注解的 init 方法时,如果他们没有响应正常的 init 方法行为,那么就会出现警告。

新的行为会在即将发布的 Clang 中得以实现,可以通过 -fobjc-arc 参数启用。内存受限的设备可以使用它来代替 Objective-C 的垃圾收集,而在桌面平台上则可以通过 -fobjc-gc 参数继续使用 Objective-C 的垃圾收集。

查看英文原文: Automatic Reference Counting in Objective-C

2011-07-10 15:012425
用户头像

发布了 88 篇内容, 共 273.8 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

“有一群人在一起,就很好!”RTE Open Day 首场活动圆满结束

RTE开发者社区

活动

极光笔记 | 浅谈企业级SaaS产品的客户成长旅程管理(上)—— 分析篇

极光GPTBots-极光推送

产品 用户体验 SaaS 产品

BenchmarkSQL 支持 TiDB 驱动以及 tidb-loadbalance

TiDB 社区干货传送门

开发语言 性能测评 应用适配 数据库连接

《清华管理评论》:智能时代的人力资源管理“智效合一”转型

用友BIP

人力资源管理

实战指南:如何利用Postman流畅调试微信支付接口

Liam

程序员 后端 微信支付 Postman API 调试

参加HDC用Petal出行,专属打车券立减20元

最新动态

命令行非明文密码连接 TiDB

TiDB 社区干货传送门

实践案例 集群管理 数据库连接

MobPush iOS SDK iOS实时活动

MobTech袤博科技

ios 消息推送 sdk

TiDB 源码编译之 PD/TiDB Dashboard 篇

TiDB 社区干货传送门

开发语言 7.x 实践

一种新型的系统设计解决方案:模块树驱动设计

得物技术

架构 架构设计 企业号 8 月 PK 榜

如何用 NPS 确定研发优先级,打破技术与业务的次元壁?

LigaAI

敏捷开发 业务价值 NPS 研发效能管理 企业号 8 月 PK 榜

大文件跨国传输慢有哪些因素,附大文件跨国快速传输解决方案

镭速

大文件跨国传输

使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass

亚马逊云科技 (Amazon Web Services)

物联网 ECS

【SOP】最佳实践之 TiDB 业务写变慢分析

TiDB 社区干货传送门

性能调优 管理与运维 故障排查/诊断 应用适配

低代码,更利好前端研发的红海

互联网工科生

前端 低代码 项目 可视化开发 JNPF

作者推荐 | 【底层服务/编程功底系列】「底层技术原理」史上最清晰的采用程序员的视角方式进行深入探索Linux零拷贝技术原理及实现

码界西柚

Linux 操作系统 零拷贝 zero copy 底层原理

中企出海关心的多数据中心问题,答案在这里!

用友BIP

中企出海

Web3到底是个啥?

BSN研习社

性能全面飙升!StarRocks 在贝壳找房的极速统一实践

StarRocks

数据库 大数据 MPP 湖仓一体 贝壳找房

华为阅读与二十一世纪出版社集团签约 共创优质少儿阅读内容生态

最新动态

TiDB 优雅关闭

TiDB 社区干货传送门

TiDB 源码解读 6.x 实践

ChatGPT 助力开发人员改进代码的5个方式

SEAL安全

开发者 ChatGPT 企业号 8 月 PK 榜

Sprint Boot学习路线6

小万哥

Java spring 微服务 后端 springboot

通过docker安装单机版minio简单测试br通过s3存储备份恢复数据

TiDB 社区干货传送门

备份 & 恢复

千帆大模型平台最新升级:接入 Llama 2 等 33 个模型!

Baidu AICLOUD

千帆大模型平台 LMops

基于流量回放的自动化回归测试平台 AREX Agent 技术实现细节分享

AREX 中文社区

开源 Java Agent 自动化测试 流量录制

如何将超大文件传输给别人,超大文件如何传输呢?

镭速

超大文件传输

RHG之漏洞自动化利用(AEG)

云起无垠

inIoT分享专栏丨如何破解物联网设备连接困境

inBuilder低代码平台

你真的了解appium吗?

QE_LAB

测试框架 appium

Objective-C中的自动引用计数_开源_Alex Blewitt_InfoQ精选文章