我有一个应用程序加载成捆绑,这样做我在CFBundleCreate之前调用 CFURLCreateFromFileSystemRepresentation : -
bundlePackageURL = CFURLCreateFromFileSystemRepresentation(
kCFAllocatorDefault,
(const UInt8*)bundlePackageFileSystemRepresentation,
strlen(bundlePackageFileSystemRepresentation),
true );
大多数情况下,运行相同的应用程序并加载驻留在应用程序包的Resource目录中的同一个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次调用该函数,当它失败时,我已经看到它在成功之前需要几百到几万次重复调用。
任何人都可以解释为什么这个功能有时可能会失败,如果这是正常的?