I\'m slightly confused. Everywhere I\'ve read, suggest that when using ARC, you still need to release core foundation objects which makes sense, ARC doesn\'t manage them. Ho
You can't release mimeType
because you don't own it. You didn't transfer ownership with the __bridge
cast.
You should be releasing uti
since you have created it.
You should also release extension
since you created it as well, but that will likely cause issues with ext
. Instead, transfer ownership to ext
.
I'd suggest the following:
+ (NSString *) fileExtensionForMimeType:(NSString *)type {
CFStringRef mimeType = (__bridge CFStringRef)type;
CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL);
CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);
NSString *ext = (__bridge_transfer NSString *)extension;
// CFRelease(mimeType); // not owned
if (uti) CFRelease(uti);
// CFRelease(extension); // ownership was transferred
return ext;
}