ios - CFStringRef 到 NSString ARC 泄漏。为什么?

标签 ios memory-leaks nsstring automatic-ref-counting

我一直在寻找从 CFStringRef 出发的正确方法至NSString在 ARC 中避免内存泄漏,一些主要投票的答案建议:

NSString * string = (__bridge NSString *)cfString;

我在这里使用这种方法,但是在分析应用程序时,我仍然在这个小方法中遇到内存泄漏[见附图]。

所以,我不知道如何解决这个问题。有人有解决这个问题的方法吗?

谢谢

enter image description here

enter image description here

因此,显然添加了 CFRelease(ext)在返回修复泄漏之前。问题是我不认为我完全理解原因。我以为这条线:
NSString * extension = (__bridge NSString*)ext

将拥有 Core Foundation ext 字符串的所有权并处理发布。
谁能准确解释这里发生了什么?

最佳答案

根据事实上的“标准” Cocoa 命名约定,包含 Create 的函数或 Copy以他们的名义返回一个引用计数为 1 的对象。您必须将此引用计数转移到 ARC-land 以便 ARC 可以处理它。您使用 __bridge_transfer为此目的的关键字。

NSString *string = (__bridge_transfer NSString *)cfString;

关于ios - CFStringRef 到 NSString ARC 泄漏。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967515/

相关文章:

ios - 两个 View Controller 之间的协议(protocol)

iphone - 解析 XML 内部 XML 标签 Objective-C

c++ - DirectX CreateBuffer 内存泄漏

iphone - SQLite MYSQL 字符编码

objective-c - 如何检测 NSString 中以 “@” 或 “#” 开头的单词?

iphone - NSString 重音编码显示疯狂的字符

ios - 这个地理定位计算有多准确?

java - Java内存泄漏是否总是出现在旧代消耗中?

c++ - MMGR 问题、代码使用和线程安全

ios - 将 GLKView 嵌套到 UIViewController 中