我试图让一些代码工作,它是用xcode 4.1编码。我的目标系统是Xcode 3.1的osx 10.5。所以在编译时经常出现一些财产问题,我能够处理。但下面的代码,我不知道如何解决聪明。如何解决(__bridge CFURLRef)所以它编译与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
一点点的搜索,我发现那里是解决了编制现代系统的代码,旧的OS没有ARC向后兼容的库。看到这里:https://github.com/plausiblelabs/PLWeakCompatibility
有什么等价物可以帮助某人在较旧的32位操作系统上编译此类代码?
嗯,确实会很多事情要做。但我只能学习它。 – 2013-05-02 19:05:55
arrrrrgh! http://www.learn-cocos2d.com/2011/11/everything-know-about-arc/ – 2013-05-02 19:15:06
也许是个愚蠢的问题,但是如果没有ARC,上面的代码会如何?将返回值更改为'return [found autorelease]'? – 2013-05-02 19:30:15