Objective c '__桥牌转换';不使用圆弧时,强制转换无效
我从一个开源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];
'__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传输
)看起来有点可疑。在更广泛的开源项目的上下文中看到这行代码会很有趣。