Objective c '__桥牌转换';不使用圆弧时,强制转换无效

Objective c '__桥牌转换';不使用圆弧时,强制转换无效,objective-c,casting,automatic-ref-counting,Objective C,Casting,Automatic Ref Counting,我从一个开源Objective-C库中得到了一些代码,当我编译时,它会给出如下警告: '__bridge_transfer' casts have no effect when not using ARC 产生这种情况的代码行是: NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];

我从一个开源Objective-C库中得到了一些代码,当我编译时,它会给出如下警告:

'__bridge_transfer' casts have no effect when not using ARC
产生这种情况的代码行是:

  NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
我如何摆脱这些警告


我使用的是Xcode版本4.6.3(4H1503)。

听起来像是将ARC代码编译为MRR。您需要使用命令行选项
-fobjc arc
,在Xcode项目设置中有一行名为“自动引用计数”。听起来您正在将arc代码编译为MRR。您需要使用命令行选项
-fobjc arc
,在Xcode项目设置中有一行名为“自动引用计数”的命令行选项。请打开arc

愚蠢的解决方案二

#if __has_feature(objc_arc)
NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
#else
NSArray *keys = [[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
#endif

愚蠢的解决方案一=>打开arc

愚蠢的解决方案二

#if __has_feature(objc_arc)
NSArray *keys = [[NSArray alloc] initWithObjects: (__bridge_transfer NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
#else
NSArray *keys = [[NSArray alloc] initWithObjects: (NSString *) kSecClass, kSecAttrAccount, kSecAttrService, nil];
#endif

CfBrigingRetain()
CfBrigingRelease()
可以很好地用于ARC、GC和MRC。

CfBrigingRetain()
CfBrigingRelease()
可以很好地用于ARC、GC和MRC。

因为ARC正在成为“做事情的好方法”,我不会只写NSArray*键=[[NSArray alloc]initWithObjects:(NSString*)kSecClass,kSecAttrAccount,kSecAttrService,nil];由于ARC正在成为“做事情的好方法”,我不会只写NSArray*键=[[NSArray alloc]initWithObjects:(NSString*)kSecClass,kSecAttrAccount,kSecAttrService,nil];您可以与哪个开源库共享此错误吗?是的,该错误是您的MRC项目中此ARC代码的结果。但整个构造(对常量进行
\uuu桥接\uu传输
)看起来有点可疑。在更广泛的开源项目的上下文中看到这行代码会很有趣。您能与哪个开源库共享您得到的这个错误吗?是的,该错误是您的MRC项目中此ARC代码的结果。但整个构造(对常量进行
\uuu桥接\uu传输
)看起来有点可疑。在更广泛的开源项目的上下文中看到这行代码会很有趣。