写点什么

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

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

关注

评论

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

如何构建基于YashanDB数据库的强大数据仓库

数据库砖家

企业数据同步利器:YashanDB跨平台同步教程

数据库砖家

企业数据治理利器:YashanDB策略制定与实施

数据库砖家

企业数字化转型中的YashanDB数据库应用与挑战

数据库砖家

企业应用中YashanDB的数据备份与恢复策略

数据库砖家

让数据服务更智能:YashanDB数据库的创新优势

数据库砖家

如何高效使用YashanDB数据库:最佳实践

数据库砖家

企业数据数字化转型中的YashanDB应用实践

数据库砖家

企业用户必读:YashanDB的技术支持服务介绍

数据库砖家

如何高效管理YashanDB数据库中的大数据集

数据库砖家

如何基于YashanDB设计高可用数据库架构

数据库砖家

基于YashanDB实现数据快速恢复的技术分析

数据库砖家

自控学习历程系列 项目管理经验总结(8)

万里无云万里天

项目管理 工厂运维

企业应用中的YashanDB数据库连接池优化方法

数据库砖家

鸿蒙应用开发从入门到实战(四):ArkTS语言概述

程序员潘Sir

鸿蒙 HarmonyOS

鸿蒙应用开发从入门到实战(三):创建鸿蒙应用

程序员潘Sir

鸿蒙 HarmonyOS

企业数字化转型中YashanDB的关键作用

数据库砖家

如何根据需求选择YashanDB数据库版本

数据库砖家

如何合理规划YashanDB数据库的数据分布?

数据库砖家

网龙旗下Mynd.ai完成对屡获殊荣的 AI 语音与远程控制技术的收购

财见

企业数字转型中的YashanDB数据库应用探索

数据库砖家

企业为什么选择YashanDB作为核心数据库系统?

数据库砖家

强化数据安全:YashanDB实施加密措施的意义

数据库砖家

如何根据企业需求选择YashanDB的版本

数据库砖家

如何构建高效的YashanDB数据备份策略?

数据库砖家

伟创力连续第三年入选《时代周刊》"全球最佳企业"榜单

财见

自控学习历程系列 低压电工经验总结(15)

万里无云万里天

工厂运维

企业数据库性能优化中YashanDB的实践经验

数据库砖家

如何高效部署YashanDB实现企业数据管理自动化

数据库砖家

如何高效使用YashanDB事务日志提升数据可靠性

数据库砖家

Replit完成2.5亿美元融资

财见

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