调用CFURLCreateFromFileSystemRepresentation有时会失败

时间:2013-06-13 08:46:02

标签: objective-c xcode macos core-foundation

我有一个应用程序加载成捆绑,这样做我在CFBundleCreate之前调用 CFURLCreateFromFileSystemRepresentation : -

bundlePackageURL = CFURLCreateFromFileSystemRepresentation(
           kCFAllocatorDefault,
           (const UInt8*)bundlePackageFileSystemRepresentation,
           strlen(bundlePackageFileSystemRepresentation),
           true );

大多数情况下,运行相同的应用程序并加载驻留在应用程序包的Res​​ource目录中的同一个bundle,该函数可以正常工作并返回有效的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次调用该函数,当它失败时,我已经看到它在成功之前需要几百到几万次重复调用。

任何人都可以解释为什么这个功能有时可能会失败,如果这是正常的?

0 个答案:

没有答案