Сбой приложения на CFRelease - PullRequest
1 голос
/ 10 февраля 2012

Иногда мое приложение падает на CFRelease(theURL);

CFURLRef theURL = CFURLCreateFromFSRef( kCFAllocatorDefault, inRef );
NSString *currentPath = [(NSURL *)theURL path];
CFRelease(theURL);  

Thread 0 Crashed:
0   com.apple.CoreFoundation        0x92a53354 CFRelease + 36  

Почему?

Правило создания

Основные функции Foundation имеют имена, которые указывают, когда у вас есть возвращаемый объект:

Функции создания объектов, для которых встроено «Создать» в имени; Функции дублирования объектов, в которые встроено «Копирование». Если Вы владеете объектом, это ваша ответственность, чтобы отказаться от собственности (используя CFRelease), когда вы закончите с ним.

1 Ответ

5 голосов
/ 10 февраля 2012

Если аргумент CFRelease равен NULL, функция завершится сбоем. Проверьте значение, возвращаемое из CFURLCreateFromFSRef.

...