Core Foundation Array를 사용하는 동안 이상한 문제가 발견되었습니다! 코드 스 니펫은 다음과 같습니다.Corefoundation CFArray 소유권
fname = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%s%s"), path, ep->d_name);
CFArrayAppendValue(fileNames, fname);
CFRelease(fname); <---- problem here
cnt = CFArrayGetCount(fileNames);
for (i = 0; i < cnt; i++) {
fname = CFArrayGetValueAtIndex(fileNames, i);
if (fname) {
ptr = (char *)CFStringGetCStringPtr(fname, CFStringGetFastestEncoding(fname));
코드가 마지막 줄에서 충돌합니다. 내가 잘못했으면 정정 해줘. CFStringRef를 만든 후에 CFArray에 추가합니다. 내 이해에 따라 개체는 이제 CFArray 소유하고 있습니다. 따라서 원래 할당 한 CFStringRef를 안전하게 제거 할 수 있습니다. 하지만 CFRelease (fname); 코드의 두 번째 부분에있는 배열 요소에 액세스하면 코드가 충돌합니다. 누군가 올바른 방법을 설명 할 수 있습니까? CFRelease()를 제거하면 모든 것이 정상적으로 작동합니다. CFMutableArray Reference로서
맞아요, 그게 문제였습니다. 감사! – user2085689