我在使用 Core Foundation Array 时发现了一个奇怪的问题!这是代码片段
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() 那么一切正常。