2013-05-02 40 views
0

我试图让一些代码工作,它是用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位操作系统上编译此类代码?

回答

0

此代码使用自动引用计数。您将需要重写整个代码库中的所有内存管理,并关闭ARC以针对较早的操作系统。

+0

嗯,确实会很多事情要做。但我只能学习它。 – 2013-05-02 19:05:55

+0

arrrrrgh! http://www.learn-cocos2d.com/2011/11/everything-know-about-arc/ – 2013-05-02 19:15:06

+0

也许是个愚蠢的问题,但是如果没有ARC,上面的代码会如何?将返回值更改为'return [found autorelease]'? – 2013-05-02 19:30:15