ARC i CFRelease?

Jestem trochę zmieszany. Wszędzie, gdzie przeczytałem, sugeruję, że podczas używania ARC nadal musisz wypuszczać podstawowe obiekty bazowe, co ma sens, ARC nie zarządza nimi. Mam jednak metodę wykorzystującą niektóre metody / obiekty CF, których użyłemCFRelease ale spowodowało to awarię aplikacji. Odkomentowanie mojegoCFReleases rozwiązuje problem, ale zakładam, że mam wyciek pamięci?

Czy ktoś mógłby wyjaśnić, które rzeczy wymagają wydania, a które nie, lub cokolwiek innego, co jest nie tak z tym kodem?

+ (NSString *) fileExtensionForMimeType:(NSString *)type
{
    CFStringRef mimeType = (__bridge CFStringRef)type;
    CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL);
    CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);

    NSString *ext = (__bridge NSString *)extension;

    // CFRelease(mimeType);
    // CFRelease(uti);
    // CFRelease(extension);

    return ext;
}

Trzej komentowaliCFRelease połączenia naprawiają problem, jak już wspomniano, ale wiem, że to źle. Co powinienem robić

questionAnswers(3)

yourAnswerToTheQuestion