当我想到ARC时,就没有发布的开销。
但是一旦遇到Core Foundation
变量,它们也需要在ARC中释放。
尽管NS..
和CF..
的ARC规则不同,但是在ARC中不支持CF..
的原因有哪些?
最佳答案
我假设您的意思是“我不必担心释放”。尽管编译器有时会对其进行优化,但通常会存在一些性能开销。
许多Core Foundation对象由ARC管理,并且它们的数量一直在增加。您可以通过在CF_IMPLICIT_BRIDGING_ENABLED
的 header 中查找特定功能是否支持ARC。如果看到,函数将返回与ARC兼容的CF对象。例如,在iOS 8中,许多核心图形功能已添加到列表中。 (我不想夸大这一点;我并不是说今天您今天不需要在这些文件上添加CFRelease
。我是说它们已设置为由ARC管理,它们由Swift中的ARC管理,并且它们最终可能最终在ObjC中直接处理,而无需CFRelease
。)
默认情况下不管理CF对象的原因是,必须有人检查并验证(审核)每个函数均符合“创建规则”命名约定,或为它们的异常正确注解。这项工作非常繁琐,Apple已将其扩展到多个版本中。但是随着时间的流逝,您会发现这种情况越来越好。
Kazuki是正确的,您不能将ARC管理的对象放在结构或联合中,但这通常不会影响Core Foundation。
顺便说一句,CF_IMPLICIT_BRIDGING_ENABLED
只是arc_cf_code_audited
clang编译指示的包装。 ARC文档7.8.1 Auditing of C retainable pointer interfaces中对此进行了说明。
关于ios - Objective-c:为什么Core Foundation变量需要在ARC中显式发布?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26013436/