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 mojegoCFRelease
s 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ć