我正在将我的项目转换为ARC,Xcode认为这里有内存泄漏,有人看到有什么问题吗?我没有写这段代码所以我不熟悉C调用。
- (NSString*) URLEscaped
{
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
return encodedString;
}
答案 0 :(得分:4)
在ARC下,您可以使用__bridge_transfer将返回字符串的内存管理转移到ARC:
NSString *encodedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
答案 1 :(得分:1)
来自docs:
您可以通过多种方式获取对象的引用 使用Core Foundation。符合Core Foundation所有权 策略,你需要知道你是否拥有一个返回的对象 一个函数,以便您知道对内存采取的操作 管理。 Core Foundation已经建立了一个命名约定 它的功能允许您确定您是否拥有 函数返回的对象。简而言之,如果函数名称包含 单词“创建”或“复制”,您拥有该对象。如果是函数名 包含单词“Get”,您不拥有该对象。
是的,你在那里泄漏CFString
。