iOS:CF对象泄漏

时间:2014-02-19 07:25:07

标签: ios objective-c

以下是 ARC

下的代码
- (NSString*)encodeURL:(NSString *)string
{
    NSString *anewString = (__bridge NSString *)(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding([self stringEncoding])));
    if (anewString) {
        return anewString;
    }
    return @"";
}

我分析了这段代码,xcode给了我泄密消息。但我不知道如何修复它。 请帮忙!提前致谢!

2 个答案:

答案 0 :(得分:2)

CFURLCreateStringByAddingPercentEscapes()会返回拥有的对象(保留+1的计数)。 __bridge转换将CF对象桥接到Objective-C但不转移所有权,因此您创建内存泄漏,因为ARC不知道该对象被保留。使用__bridge_transfer代替_bridge来转移所有权,以便Objective-C ARC可以为您照顾。

答案 1 :(得分:0)

而不是(__bridge NSString *)(...)使用CFBridgingRelease( ... ),而“...”=您的字符串创建。