写点什么

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

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

关注

评论

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

生成式 AI 在电商评论场景的应用 : 场景分析和技术选型

亚马逊云科技 (Amazon Web Services)

超实用指南:应届生如何三步高效拿下理想实习机会

Y11

面试 找工作 转行 笔试 找实习

出版社资源管理系统的运营

北京木奇移动技术有限公司

软件外包公司 出版社 资源管理系统

MES助力电线电缆行业生产:从质量管控到追溯管理

万界星空科技

mes 电线电缆行业 制造业工厂 电线电缆mes 生产管理MES系统

云备份技术解析:备份删除&合并原理

天翼云开发者社区

云备份

AI智上 | 用友凭借AI之力,绘财务数智化新蓝图

用友智能财务

京东3D空间视频生成技术探索与应用

京东零售技术

AI+代理IP手把手教你爬取某度

袁袁袁袁满

AI 代理IP 免费代理ip Python爬虫 爬虫实战

阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!

阿里云大数据AI技术

大数据 elasticsearch 阿里云 Serverless 向量检索

出版社资源管理系统的技术架构

北京木奇移动技术有限公司

出版社 教学资源网 资源管理系统

GreatSQL启动崩溃:jemalloc依赖缺失问题排查

GreatSQL

《Operating System Concepts》阅读笔记:p733-p734

codists

1688代采系统功能深度解析:如何通过自动采集商品详情数据API接口实现高效运营

代码忍者

1688代采集运系统

全面了解如何删除Mac启动台(Launchpad)的无效图标,Mac软件卸载后残留图标无法卸载的解决方法

阿拉灯神丁

mac系统清理优化软件 应用程序卸载 程序坞图标删除软件 CleanMyMac X中文版 卸载清理软件

出版社资源管理系统的主要功能

北京木奇移动技术有限公司

软件外包公司 出版社 教学资源网

坐标上海,20~40K的面试强度

王中阳Go

Go 面经 上海

SvelteKit 最新中文文档教程(21)—— 最佳实践之图片

冴羽

前端 前端框架 React Svelte SvelteKit

出版社资源管理系统的技术难点

北京木奇移动技术有限公司

软件外包公司 教学资源网 资源管理系统

做Docx预览,一定要做这个神库!!

Immerse

Vue 前端 docx 文件预览

三句话搞定周末出行攻略!我用 AI 生成一日游可视化页面,还能秒上线!

陈明勇

MCP

关税冲击下,全球AI向何处去?

脑极体

AI

Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报

RTE开发者社区

促销系统:促销活动、优惠券、优惠规则概念模型设计

量贩潮汐·WholesaleTide

勒索软件介绍

天翼云开发者社区

勒索攻击

zk源码—会话的实现原理

电子尖叫食人鱼

Java

汽车上云的不可逆之路

脑洞汽车

AI

出版社资源管理系统的开发

北京木奇移动技术有限公司

软件外包公司 教学资源网 资源管理系统

Arthas watch (方法执行数据观测)

刘大猫

Arthas 图像处理 图像分割 光学成像 光电成像技术

[方案讨论]怎么把大量电话号码批量导入手机通讯录,联系人号码导入苹果iphone华为小米等手机

一码平川

在亚马逊云科技环境上基于 Dify Agent 快速部署 text2SQL 智能数据分析助手

亚马逊云科技 (Amazon Web Services)

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