2014-02-19 85 views
0

這裏是我的下ARC代碼:的iOS:CF對象泄漏

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

我分析這個代碼和Xcode中給了我泄漏message.But我donnot知道如何解決它。 請幫助!提前致謝!

回答

2

CFURLCreateStringByAddingPercentEscapes()返回一個擁有對象(保留+1)。 __bridge將CF對象連接到Objective-C,但不會傳輸所有權,因此您創建內存泄漏,因爲ARC不知道該對象被保留。使用__bridge_transfer而不是_bridge來轉移所有權,以便Objective-C ARC可以爲您負責。

+1

您也可以使用'CFBridgingRelease()'。它與'__bridge_transfer'完全相同,但如果您習慣了CF的內存管理約定,那麼您可以更容易地使用它。 –

0

而不是(__bridge NSString *)(...)使用CFBridgingRelease(...),其中「...」=您的字符串創建。