Foundation
對象和Core Foundation
對象重要的區別是ARC
下的內存管理問題,在非ARC
下二者都須要開發者手動管理內存,沒有區別,可是在ARC
下系統只會自動管理Foundation
對象的釋放,而不支持Core Foundation
對象的管理,所以在ARC
下二者進行轉換後必需要肯定對象是由開發者手動管理仍是ARC
系統管理,不然可能致使內存泄露ARC
不能管理Core Foundation
對象的生命週期,因此Core Foundation
對象和Foundation
對象轉換時,須要使用到__bridge、__bridge_retained和__bridge_transfer
三個轉換關鍵字__bridge
CF
和OC
對象轉化時只涉及對象類型,不涉及對象全部權的轉化,他的含義是,不改變對象的管理權全部者,原本由ARC
管理的Foundation
對象,轉換成Core Foundation
對象後依舊由ARC
管理,原本有開發者手動管理的Core Foundation
對象轉換成Foundation
對象後,繼續由開發者手動管理git
__bridge_transfer
也可使用CFBridgingRelease
用在將Core Foundation
對象轉換爲Foundation
對象,同時將對象內存管理權交給ARC
,由ARC
來代替咱們管理內存github
__bridge_retained
也可使用CFBridgingRetain
用在將Foundation
對象轉換爲Core Foundation
對象,同時將對象內存管理權交給咱們,後續須要使用CFRelease
或者相關方法來釋放對象,須要咱們手動來管理內存bash
Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL, NSUnderlyingError=0x7fa9b1d06120 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}}
NSString * resultUrl = @"網絡請求字段或者地址";
// 處理請求中包含的特殊字符,如「+」
NSString *endResutl = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)resultUrl, NULL, CFSTR("+"), kCFStringEncodingUTF8);
複製代碼
附:個人博客地址網絡