【问题标题】:Does the Core Foundation objects are automatically released by ARC or do we need manual memory management?Core Foundation 对象是由 ARC 自动释放还是我们需要手动内存管理?
【发布时间】:2015-10-04 17:31:44
【问题描述】:

在我的代码中创建了一个 Core Foundation 对象,并且从苹果文档中我了解到

“核心基础对象的寿命由其决定 引用计数”https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Articles/lifecycle.html

所以我非常怀疑核心基础对象是ARC释放还是我们需要通过编写CFRelease(myobject)

来释放

我正在使用 Xcode 6.4,目前在我的代码中没有使用任何 CFRelease(myobject) 来释放我的 Core Foundation 对象,但我仍然无法在 xcode 中找到任何 内存泄漏仪器(泄漏)..

所以我的问题是 ARC 是否会负责释放 Core Foundation 对象..??

因为我刚刚遇到了这样的声明,

回想一下,ARC 只处理 Objective-C 对象。它不管理 CoreFoundation 对象的保留和释放 Objective-C 对象。http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

所以如果有人遇到同样的问题并找到解决方案,请分享...

提前谢谢..

【问题讨论】:

    标签: memory-management memory-leaks automatic-ref-counting core-foundation xcode-instruments


    【解决方案1】:

    您必须调用CFRelease 来释放Core Foundation 对象。

    https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW1

    编译器不会自动管理 Core Foundation 对象的生命周期;你必须打电话给CFRetainCFRelease

    或者您可以使用__bridge_transferCFBridgingRelease 将Core Foundation 对象的所有权移至Objective-C ARC 对象所有权下。

    • __bridge_transferCFBridgingRelease 将非 Objective-C 指针移动到 Objective-C 并将所有权转移给 ARC。
      • ARC 负责放弃对象的所有权。

    所以在下面的情况下,NSString* __strong name 变量拥有 Core Foundation 对象的所有权。当name = nil;name 变量的作用域结束时,Core Foundation 对象会自动释放。

    NSString *name = (NSString *)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    

    或者

    NSString *name = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    

    【讨论】:

    • 感谢您的回复...您能否列出所有其他框架,例如核心基础框架,ARC 不会照顾..??
    • AFAIK,地址簿框架。但它已被 iOS 9 弃用。无论如何,你为什么不接受这个答案? :)
    • @KazukiSakamoto 您能否通过指向 Apple 文档的链接完成正确且有帮助的答案,以在 ARC 的上下文中使用 __bridge_transfer 和 CFBridgingRelease() ?
    猜你喜欢
    • 2010-09-24
    • 2011-07-01
    • 1970-01-01
    • 2011-11-18
    • 2012-09-17
    • 2011-05-08
    • 2013-09-07
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多