Вызов CFURLCreateFromFileSystemRepresentation иногда не удается
У меня есть приложение, которое загружается в пакет, и при этом я вызываю CFURLCreateFromFileSystemRepresentation перед CFBundleCreate: -
bundlePackageURL = CFURLCreateFromFileSystemRepresentation(
kCFAllocatorDefault,
(const UInt8*)bundlePackageFileSystemRepresentation,
strlen(bundlePackageFileSystemRepresentation),
true );
В большинстве случаев, при запуске того же приложения и загрузке того же пакета, который находится в каталоге ресурсов пакета приложения, функция работает и возвращает действительный CFURL. Однако с точно такими же параметрами, переданными в функцию, вызов иногда завершается неудачно.
Теперь у меня есть код для обработки ошибки:
CFURLRef bundlePackageURL = NULL;
int attempt = 0;
while((bundlePackageURL == NULL) && (attempt++ < 12000))
{
bundlePackageURL = CFURLCreateFromFileSystemRepresentation(
kCFAllocatorDefault,
(const UInt8*)bundlePackageFileSystemRepresentation,
strlen(bundlePackageFileSystemRepresentation),
true );
// failed to load, so try again
if(bundlePackageURL == NULL)
fprintf(stdout, "Retrying to obtain CFURL: %d...\n", attempt);
}
Как вы можете видеть, это делает до 12000 попыток вызова функции, и когда она терпит неудачу, я видел, что для успешного выполнения требуется от нескольких сотен до более чем 10000 повторных вызовов.
Кто-нибудь может объяснить, почему эта функция иногда дает сбой и это нормально?