簡體   English   中英

調用函數“ CFURLCreateStringByAddingPercentEscapes”將返回保留計數為+1的Core Foundation對象

[英]Call to function 'CFURLCreateStringByAddingPercentEscapes' returns a Core Foundation object with a +1 retain count

我將項目轉換為ARC,Xcode認為這里存在內存泄漏,有人看到這有什么問題嗎? 我沒有編寫此代碼,所以我對C調用不熟悉。

- (NSString*) URLEscaped
{

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

    return encodedString;

}

在ARC下,您可以使用__bridge_transfer將返回的字符串的內存管理轉移到ARC:

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

文檔

您可以通過多種方式使用Core Foundation獲得對對象的引用。 根據Core Foundation所有權策略,您需要知道您是否擁有某個函數返回的對象,以便您知道針對內存管理應采取的操作。 Core Foundation已為其功能建立了命名約定,可讓您確定是否擁有由函數返回的對象。 簡而言之,如果函數名稱包含單詞“ Create”或“ Copy”,則說明您擁有該對象。 如果函數名稱包含單詞“ Get”,則您不擁有該對象。

是的,您正在那里泄漏CFString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM