【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

android插件化资源冲突,享学课堂vip二期

android 程序员 移动开发

Android性能优化推荐书,享学课堂课程怎么样

android 程序员 移动开发

Android性能优化面试题集锦,架构师必备

android 程序员 移动开发

Android插件化入门指南,程序员必看

android 程序员 移动开发

Android模块化面向接口编程,快来收藏

android 程序员 移动开发

Android热修复原理,跳槽字节跳动

android 程序员 移动开发

Android技术类校招面试题汇总,享学课堂Android架构师课程

android 程序员 移动开发

没想到!我在简历上写了“精通MySQL”,阿里面试官跟我死磕后就给我发了高薪offer

收到请回复

程序员 编程语言 后端

android插件化和热修复区别,扔物线学堂

android 程序员 移动开发

极光笔记丨百亿级数据的实时存取优化与实践

极光JIGUANG

高可用 软件架构 多级存储系统 高性能存储

Android最新实习面试经验总结,我就不信你还听不明白了

android 程序员 移动开发

卷王如何刷力扣

bigsai

数据结构 算法 刷题

Android快速转战Kotlin教程,安卓已死

android 程序员 移动开发

Android技术类校招面试题汇总:扔物线rxJava

android 程序员 移动开发

极客时间 - 架构实战营 - 模块一作业

秋夫人

架构实战营

Android热修复原理,金九银十旗开得胜

android 程序员 移动开发

Android开发面试题!动脑学院安卓教程vip2019

android 程序员 移动开发

Android插件化主流框架和实现原理,挑战大厂重燃激情

android 程序员 移动开发

Android最牛教材!享学课堂Android架构师二期

android 程序员 移动开发

Android教程,享学androidvip

android 程序员 移动开发

Android框架,动脑学院android视频

android 程序员 移动开发

架构实战-模块一

唐敏

架构实战营

android插件化原理,android开发视频百度网盘

android 程序员 移动开发

【推荐】如何将枯燥的大数据呈现为可视化的图和动画?

云智慧AIOps社区

大数据 开源 大前端 数据可视化 大屏可视化

android插件化开发指南,享学课堂课程怎么样

android 程序员 移动开发

android热更新图片,动脑学院视频百度云

android 程序员 移动开发

Android技术类校招面试题汇总:android享学课堂vip课程下载

android 程序员 移动开发

Android推送技术解析,Android开发工程师面试题

android 程序员 移动开发

COSCon'21 参会指南 你想要的这里都有

开源社

开源社区 第六届中国开源年会 COSCon'21 开源社

Android攒了一个月的面试题及解答,Android程序员必会

android 程序员 移动开发

Android最牛教材!kotlin入门教程百度网盘

android 程序员 移动开发

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