iOS:CFTypeRef不允许使用ARC

时间:2012-04-20 20:08:43

标签: ios automatic-ref-counting keychain

我想从我的钥匙串中获取用户名/密码。为此我遵循了这个指南:

Simple iPhone Keychain Access

但是ARC不允许这部分:

NSData *result = nil;    
OSStatus status = SecItemCopyMatching(
                  (CFDictionaryRef)searchDictionary,                                            
                  (CFTypeRef *)&result);

我该怎么办?

2 个答案:

答案 0 :(得分:19)

ARC仅管理Objective-C类型。如果您转换为Core Foundation类型,则必须使用__bridge__bridge_retained__bridge_transfer告知拥有该变量的ARC。

这是关于ARC下的免费桥接的Apple's official documentation,或者参见this blog post(向下滚动到免费电话桥接)以获得精彩的概述。

例如:

NSData *inData = nil;
CFTypeRef inTypeRef = (__bridge CFTypeRef)inData;
OSStatus status = SecItemCopyMatching(
                   (__bridge CFDictionaryRef)searchDictionary, 
                   &inTypeRef);

答案 1 :(得分:1)

CFTypeRef inData = NULL;
OSStatus status = SecItemCopyMatching(
                   (__bridge CFDictionaryRef)searchDictionary, 
                   & inData);
NSData *data = (__bridge NSData *)inData;