Leg*_*las 2 memory-leaks memory-management core-foundation xcode-instruments automatic-ref-counting
在我的代码中,我正在创建一个Core Foundation对象,从Apple文档中我知道
“ 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对象。它不管理非Objective-C对象的CoreFoundation对象的保留和释放。http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode
因此,如果有人遇到相同的问题并找到一种解决方案,请与我们分享...
提前致谢..
您必须调用CFRelease以释放Core Foundation对象。
编译器不会自动管理Core Foundation对象的生存期。您必须致电
CFRetain和CFRelease。
或者,您可以使用__bridge_transfer或CFBridgingRelease将Core Foundation对象的所有权移至Objective-C ARC对象所有权下的。
__bridge_transfer或CFBridgingRelease将非Objective-C指针移至Objective-C,并将所有权转移到ARC。
- ARC负责放弃对象的所有权。
因此,在以下情况下,NSString* __strong name变量具有Core Foundation对象的所有权。当变量name = nil;范围或name变量范围结束时,会自动释放Core Foundation对象。
NSString *name = (NSString *)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
Run Code Online (Sandbox Code Playgroud)
要么
NSString *name = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |