8

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

简单的 iPhone 钥匙串访问

但是ARC不允许这部分:

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

我能做些什么?

4

2 回答 2

21

ARC 只管理 Objective-C 类型。如果您转换为 Core Foundation 类型,您必须使用__bridge,__bridge_retained或告诉 ARC 谁拥有该变量__bridge_transfer

这是Apple关于 ARC 下的免费桥接的官方文档,或查看此博客文章(向下滚动到免费桥接)以获得很好的概述。

例如:

NSData *inData = nil;
CFTypeRef inTypeRef = (__bridge CFTypeRef)inData;
OSStatus status = SecItemCopyMatching(
                   (__bridge CFDictionaryRef)searchDictionary, 
                   &inTypeRef);
于 2012-04-20T20:19:15.157 回答
1
CFTypeRef inData = NULL;
OSStatus status = SecItemCopyMatching(
                   (__bridge CFDictionaryRef)searchDictionary, 
                   & inData);
NSData *data = (__bridge NSData *)inData;
于 2015-12-02T10:03:42.677 回答