写点什么

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:012366
用户头像

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

关注

评论

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

MobTech旗下核心SDK产品已全面适配HarmonyOS NEXT鸿蒙星河版

MobTech袤博科技

Java 开发者 产品动态

极限编程要完全遵守的12个实践!

敏捷开发

程序员 敏捷开发 软件开发 代码规范 极限编程

百行代码实现 Kafka 运行在 S3 之上

AutoMQ

青岛等保测评公司名称是什么?在哪里?电话多少?

行云管家

等保 堡垒机 等级保护 等保测评

什么是海外云手机?海外云手机有什么用?

Ogcloud

云手机 海外云手机 云手机海外版 手机群控 海外社媒营销

如何通过 CloudCanal 实现从 Kafka 到 AutoMQ 的数据迁移

AutoMQ

50万年——黑客找到你IPv6地址的时间

防火墙后吃泡面

淘宝API接口测试的详细步骤

Noah

5家券商综合评级上升 6月券商App终端业务体验评测报告发布

博睿数据

四大核心能力再升级 Bonree ONE 3.0引领全域可观测进入next level

博睿数据

上万次实践总结,原来这些才是敏捷测试要遵循的原则

敏捷开发

编程 敏捷开发 极限编程 敏捷实践 持续改进

【首席战略官分享】业务流程管理的演变与挑战

望繁信科技

业务流程管理 流程挖掘 流程智能 望繁信科技

当当网商品列表数据采集丨当当网商品列表数据接口

tbapi

当当网 当当网商品列表数据接口 当当网商品详情接口 当当网API接口

代理IP如何助力验证广告?

IPIDEA全球HTTP

代理IP

嘉为蓝鲸WeOps智能化模块:服务台智能助手提供更好的服务体验

嘉为蓝鲸

AI 运维 智能运维 大模型

企业应用观测中枢建设

嘉为蓝鲸

运维 日志管理 可观测

汇聚数字智慧 构建新质未来——《CMG数字中国》融媒体节目正式上线

江湖老铁

时至今日,我们还要必须用敏捷开发吗?

敏捷开发

Scrum 敏捷开发 企业管理 代码规范 敏捷团队

第十二期双周精选

AutoMQ

智谱发布 AI 生成视频模型「清影」;TikTok 推出听歌搜短视频功能丨 RTE 开发者日报

声网

运维安全审计系统定义以及作用详细讲解

行云管家

软件 安全运维 运维审计 运维安全

当 Meme 与 TON 融合,两大顶流标签会带来什么机会?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

工作流中 BPMN 、 CMMN 、 DMN 的应用场景

源字节1号

开源

GOGC 2024 等你来

非凸科技

开源 技术 招聘 GOGC

技术同学的职场生存指南

老张

职业规划 认知提升 打工人 职场发展

AutoMQ 与 Timeplus 达成战略合作强强联手

AutoMQ

云计算 云原生 后端

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