调用函数'CFURLCreateStringByAddingPercentEscapes'返回一个带有+1保留计数的Core Foundation对象

时间:2012-05-11 08:56:34

标签: iphone objective-c

我正在将我的项目转换为ARC,Xcode认为这里有内存泄漏,有人看到有什么问题吗?我没有写这段代码所以我不熟悉C调用。

- (NSString*) URLEscaped
{

    NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                                NULL,
                                (CFStringRef)self,
                                NULL,
                                (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                kCFStringEncodingUTF8);

    return encodedString;

}

2 个答案:

答案 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