0
我在使用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(),那麼一切正常。
你說得對,就是這個問題。謝謝! – user2085689