我一直在寻找从 CFStringRef
出发的正确方法至NSString
在 ARC 中避免内存泄漏,一些主要投票的答案建议:
NSString * string = (__bridge NSString *)cfString;
我在这里使用这种方法,但是在分析应用程序时,我仍然在这个小方法中遇到内存泄漏[见附图]。
所以,我不知道如何解决这个问题。有人有解决这个问题的方法吗?
谢谢
因此,显然添加了
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/