我试图猜测特定文件的 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) 期间,提示存储在“MIMEType”中的对象存在潜在泄漏。
如何重写此实用方法以避免泄漏?
最佳答案
您正在创建一个不受 ARC 管理的 CFStringRef
,您需要将该引用的所有权转移给 ARC,以便 ARC 在需要时释放它。为此,您使用 __bridge_transfer
,您使用的 __bridge
不会转移所有权,这将导致泄漏。
关于cocoa - 如何避免该函数中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21304715/