在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

软件架构思考

轻口味

android 架构设计原则 10月月更

分享一套golang实现的 IM 系统,一键部署服务端,客户端SDK全平台支持,可以替代IM云服务

OpenIM

偷瞄大佬书签栏,16个C++必备学习网站,建议收藏

奔着腾讯去

c++

Python代码阅读(第34篇):列表元素出现频率字典

Felix

Python 编程 Code Programing 阅读代码

流计算 Oceanus 限量1元秒杀,立省2000元

腾讯云大数据

内网域渗透分析(实战总结)

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

新一代容器平台ACK Anywhere,来了

阿里巴巴中间件

阿里云 云原生 中间件 ACK ACK Anywhere

必须得会的汽车ECU研发基础—底层软件介绍4

SOA开发者

自动驾驶混战,剑气二宗谁能笑傲江湖?

脑极体

记不住源码?掌握这套方法,Alibaba必有你一席之地!

Java 架构 面试 程序人生 编程语言

自我提升:高效能人士的 7 个习惯学习笔记(二)

程序员架构进阶

效率 自我管理 自我提升 10月月更

接棒运动赛事!工厂里也有热血竞技?

白洞计划

使用AI在原神里自动钓鱼,扫描Git仓库泄露的密码 【蛮三刀酱的Github周刊第三期】

Zhendong

GitHub

携程 x StarRocks:高效支持高并发查询,大幅降低人力和硬件成本

StarRocks

大数据 数据分析 高并发 StarRocks

中国移动5G消息开发者社区 | 主题沙龙直播预约:5G消息在文旅场景的应用探讨

5G消息

5G 5G消息 中国移动5G rcs

Hold the Door!区块链底层平台流控分析

趣链科技

区块链 流量控制 底层平台

认识流媒体协议,从 RTSP 协议解析开始!

RTE开发者社区

协议 RTSP

阿里P8最全总结PDF:Tomcat+虚拟机+Spring全家桶+MyBatis源码等

Java 架构 面试 程序人生 编程语言

手把手教你使用Studio Lite + Digtal car!助力智能汽车场景、轻应用开发更轻松!

SOA开发者

代码检查规则:Java语言案例详解

百度开发者中心

Java 最佳实践 案例分享 代码检查规则

用时三个月,阿里P8大佬总结出来的最深《Java性能优化全攻略》限时分享!

Java 架构 面试 程序人生 编程语言

Serverless 工程实践 | Serverless 应用优化与调试秘诀

阿里巴巴云原生

阿里云 Serverless 云原生

看完阿里大牛的数据结构学习笔记,我直接手撕了500道Leetcode题

Java 程序员 架构 面试 算法

数字化加速时刻,天津港解锁了“天工开物”新篇

脑极体

机器人自主学习新进展,百度飞桨发布四足机器人控制强化学习新算法

百度大脑

人工智能 飞桨

手把手带你玩转 JS | 引航计划|大前端

三掌柜

大前端 引航计划 引航 技术专题合集

都2021年了,还在算法上折跟头?这本《字节跳动面试必问算法秘籍》送给你!

Java 架构 面试 程序人生 编程语言

还在郁郁寡欢?啃完666页Java面试高频宝典,十月保你定级腾讯T3-2

Java 架构 面试 程序人生 编程语言

运用贝塞尔曲线绘制笔锋效果

ZEGO即构

音视频 笔锋实践 贝塞尔曲线

引航计划|大前端|优质合集手把手带你玩转移动开发

三掌柜

大前端 引航计划 引航

如何区分封闭图形的内部和外部

Changing Lin

10月月更

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