약간 혼란 스럽네요. 내가 읽은 모든 곳에서 ARC를 사용할 때 여전히 핵심 기초 객체를 릴리스해야한다고 제안합니다. ARC는이를 관리하지 않습니다. 그러나, 나는 CFRelease
을 사용하는 일부 CF 메서드/개체를 사용하는 메서드를 가지고 있지만 그 다음에 응용 프로그램이 중단됩니다. 내 CFRelease
의 주석을 제거하면 문제가 해결되지만 메모리 누수가 있다고 가정합니다.ARC 및 CF 릴리즈?
누군가이 자료를 공개해야하는지, 어떤 자료를 필요로하는지 또는이 코드에 문제가 있는지 설명해주세요.
+ (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;
}
세 주석 CFRelease
호출은 언급 한 바와 같이 문제를 해결하지만, 나는 그것이 잘못 알고있다. 나는 무엇을해야만 하는가?
. 주석 처리를 해제하면 – Raptor
내가 주석 처리를 취소하면 EXC_BAD_ACCESS 예외로 인해 응용 프로그램이 중단됩니다. 악기에서 추적을하면이 메소드를 가리키고 해당 라인에 주석을 달아 수정합니다 – PaReeOhNos
mimeType의 참조 횟수를 늘리지 않으므로 uti 및 extension 만 릴리스해야 mimeType은 릴리스하지 마십시오. 당신은 단순히 그것을 유형 캐스팅합니다.CFRelease에 마지막으로 주석을 달고 어떤 일이 발생했는지 알려주세요. –