0

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

- (NSString*) URLEscaped
{

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

    return encodedString;

}
4

2 回答 2

4

在 ARC 下,您可以使用 __bridge_transfer 将返回字符串的内存管理转移到 ARC:

NSString *encodedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
                            NULL,
                            (CFStringRef)self,
                            NULL,
                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                            kCFStringEncodingUTF8);
于 2012-08-10T19:15:14.547 回答
1

文档

您可以通过多种方式使用 Core Foundation 获取对对象的引用。根据 Core Foundation 的所有权政策,您需要知道您是否拥有由函数返回的对象,以便您知道在内存管理方面要采取什么行动。Core Foundation 为其函数建立了命名约定,允许您确定您是否拥有函数返回的对象。简而言之,如果函数名称包含“创建”或“复制”一词,则您拥有该对象。如果函数名称包含单词“Get”,则您不拥有该对象。

是的,你在CFString那里泄漏了一个。

于 2012-05-11T09:00:21.367 回答