2014-01-23 44 views
0

我試圖猜測一個特定的文件的MIME類型,我有這樣的代碼:如何避免此功能中的內存泄漏?

- (NSString *)fileMIMEType:(NSString *)file { 
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[file pathExtension], NULL); 
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType); 
    CFRelease(UTI); 
    return (__bridge NSString *)MIMEType; 
} 

在分析的Xcode(5)抱怨有存儲到「MIME類型」對象的潛在泄漏。

如何重寫此實用程序方法以避免泄漏?

回答

1

您正在創建一個不由ARC管理的CFStringRef,您需要轉移該引用對ARC的所有權,以便在需要時將其釋放。爲此,您使用__bridge_transfer,您使用的__bridge不會轉讓將導致泄漏的所有權。

+0

今天瞭解了'__bridge_transfer',非常感謝! –