cocoa - 如何避免该函数中的内存泄漏?

标签 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;
}

在分析 Xcode (5) 期间,提示存储在“MIMEType”中的对象存在潜在泄漏。

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

最佳答案

您正在创建一个不受 ARC 管理的 CFStringRef,您需要将该引用的所有权转移给 ARC,以便 ARC 在需要时释放它。为此,您使用 __bridge_transfer,您使用的 __bridge 不会转移所有权,这将导致泄漏。

关于cocoa - 如何避免该函数中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21304715/

相关文章:

objective-c - "Context"在 Cocoa/Objective-c 中是什么意思?

objective-c - NSCopying 和 copyWithZone : - should they return [self retain] or something else?

c - 如何使用 C 将动态字符串放入数组中

c++ - operator new(n) 与 new unsigned char[n] 用于放置 new

c - 跟踪内存分配

objective-c - 如何通过按下按钮向应用程序发送键盘事件?

objective-c - 在cocoa程序中创建一个对象来访问子类NSview

objective-c - 具有可编辑内容的 NSTreeController

c++ - 如何获得大对齐的 block ?

c - glibc中重复内存分配的效率