我正在使用 Xcode 4.5.2 来练习 iOS 编程。我的应用程序似乎编译得很好,但是当我执行 Product -> Analyze 时,我得到以下消息,这些消息在
如果有人可以向我解释这一点,我将不胜感激?
PS。__bridge
除了编译器建议的单词并且我同意添加它之外,我有点了解大多数情况。
我正在使用 Xcode 4.5.2 来练习 iOS 编程。我的应用程序似乎编译得很好,但是当我执行 Product -> Analyze 时,我得到以下消息,这些消息在
如果有人可以向我解释这一点,我将不胜感激?
PS。__bridge
除了编译器建议的单词并且我同意添加它之外,我有点了解大多数情况。
你应该使用__bridge_transfer
,而不是__bridge
。您想将所有权转让给 ARC,因此它会为您清理它。不这样做会导致泄漏。
请参阅过渡到 ARC 发行说明中关于免费桥接的讨论。
根据 WWDC 2012 的说明,Apple 实际上建议CFBridgingRelease
. 因此:
NSString *encodedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(...);
只要您仔细跟踪它并在适当的时候释放它,它就不是泄漏。Analyzer 只是提示,如果有人在外部需要它,函数应该返回自动释放的 ref,或者在函数内部释放它。