iOS:CFTypeRef不允许使用ARC

fil*_*lou 8 keychain ios automatic-ref-counting

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

简单的iPhone钥匙扣访问

但ARC不允许这部分内容:

NSData *result = nil;    
OSStatus status = SecItemCopyMatching(
                  (CFDictionaryRef)searchDictionary,                                            
                  (CFTypeRef *)&result);
Run Code Online (Sandbox Code Playgroud)

我能做什么?

Sim*_*ker 20

ARC仅管理Objective-C类型.如果你投以核心基础类型你必须告诉ARC谁拥有使用变量__bridge,__bridge_retained__bridge_transfer.

这是Apple关于ARC下免费桥接的官方文档,或者请参阅此博客文章(向下滚动到Toll-Free Bridging)以获得精彩的概述.

例如:

NSData *inData = nil;
CFTypeRef inTypeRef = (__bridge CFTypeRef)inData;
OSStatus status = SecItemCopyMatching(
                   (__bridge CFDictionaryRef)searchDictionary, 
                   &inTypeRef);
Run Code Online (Sandbox Code Playgroud)

  • 从你的解除引用中分离你的演员阵容.像这样:`CFTypeRef r =(__ bridge CFTypeRef)result; OSStatus status = SecItemCopyMatching((__ bridge CFDictionaryRef)searchDictionary,&r);` (4认同)