[英]Call to function 'CFUUIDCreate' returns a Core Foundation object with a +1 retain count
[英]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.