如何在此功能中避免内存泄漏?

时间:2014-01-23 09:56:04

标签: cocoa memory-management

我正在尝试猜测特定文件的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;
}

在Analyze期间Xcode(5)抱怨存储在'MIMEType'中的对象可能存在泄漏。

如何重写此实用程序方法以避免泄漏?

1 个答案:

答案 0 :(得分:1)

您正在创建一个不受ARC管理的CFStringRef,您需要传输对ARC的引用的所有权,以便在需要时将其释放。为此,您使用__bridge_transfer,您使用的__bridge不会转让所有权,从而导致泄密。