1

我有一个以捆绑包形式加载的应用程序,因此我在 CFBundleCreate 之前调用CFURLCreateFromFileSystemRepresentation:-

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 次重复调用才能成功。

谁能解释为什么该功能有时会失败,如果这是正常的?

4

0 回答 0