2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

Cloud Kernel SIG 月度动态:发布多个 ANCK 版本,引入多个第三方硬件驱动

OpenAnolis小助手

Linux 龙蜥社区 anck kernel 龙蜥sig

CODING 界面全新升级,代码仓库 Rebase 变基合并、批量复制事项等功能上线!

CODING DevOps

是否拥有具身智能,是扫地机器人能否打破“内卷”的关键

脑极体

AI 智能扫地机器人

VR虚拟现实:技在医疗行业的具体应用

3DCAT实时渲染

VR虚拟现实

全力以赴,火山引擎边缘云代表团出战亚运会

火山引擎边缘云

电竞 边缘云 边缘云原生 亚运会

Chrome 118 版本中的新功能

南城FE

CSS chrome 前端 浏览器

Apache Dubbo 首个 Node.js 3.0-alpha 版本正式发布

阿里巴巴云原生

阿里云 云原生 dubbo

手把手带你用Python和文心一言搭建《AI看图写诗》网页项目

袁袁袁袁满

Python 人工智能

文本识别工具 TextSniper 免激活最新版

胖墩儿不胖y

OCR截图文字识别工具 OCR识别

鹅厂练习 13 年 Coding 后,我悟了

CODING DevOps

低代码平台为企业应用开发提速

树上有只程序猿

低代码

统一观测丨使用 Prometheus 监控 SQL Server 最佳实践

阿里巴巴云原生

阿里云 云原生 Prometheus

golang面试基础-sync.map

Quincy

golang 数据结构 面试 后端

Python 集合(Sets)3

小万哥

Python 程序员 软件 后端 开发

音频技术团队空降直播间,揭秘小红书语音技术创新探索与落地实践

小红书技术REDtech

音频 #人工智能

低代码:避免重复造轮子的高效工具

互联网工科生

低代码 造轮子 JNPF

1000字扫盲RTC

X2Rtc

开源 音视频 CDN RTC

如何通过 NFTScan API 按照 NFT 合约地址检索数据?

NFT Research

NFT NFT\ NFTScan

Linux桌面环境(桌面系统)

芯动大师

Grafana 10 新特性解读:体验与协作全面提升

阿里巴巴云原生

阿里云 云原生 Grafana

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