我尝试让一些使用 xcode 4.1 编码的代码工作。我的目标系统是 osx 10.5 和 Xcode 3.1。因此,在编译时经常会出现一些属性问题,我能够处理。但是下面的代码,我不知道如何巧妙地解决。
编译器说:'__bridge'
未声明(在这个函数中首次使用)
A)我知道这是一个宏,但想知道我是否可以删除那个短语 (__bridge CFURLRef)
?
B)有没有更聪明的解决方案,我必须学习?
C) 知识:这__bridge
究竟是为了什么,它是什么之间的桥梁?
static BOOL willStartAtLogin() {
NSURL *appurl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
BOOL found = NO;
LSSharedFileListRef items = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
if (items) {
UInt32 seed;
CFArrayRef itemsArray = LSSharedFileListCopySnapshot(items, &seed);
CFIndex count = CFArrayGetCount(itemsArray);
for (CFIndex i = 0; i < count; i++) {
LSSharedFileListItemRef a = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(itemsArray, i);
CFURLRef url = NULL;
OSStatus err = LSSharedFileListItemResolve(a, kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes, &url, NULL);
if (err == noErr) {
// here follows the problematic part
found = CFEqual(url, (__bridge CFURLRef)appurl);
CFRelease(url);
if (found) { break; }
}
}
CFRelease(items);
}
return found;
}
编辑
在@Catfish_Man 的回答之后,我想知道如果没有ARC,这段代码会是什么样子,即使在这个现代代码中实现所有缺失的内存管理也是一项艰巨的工作!
EDIT2
经过一番搜索,我发现有一个库可以解决在现代系统上为没有 ARC 的旧操作系统编译代码的向后兼容性问题。在这里看到:https
://github.com/plausiblelabs/PLWeakCompatibility
是否有等效的东西可以帮助某人在较旧的 32 位操作系统上编译此类代码?