从iOS5通过引用和objc_unretainedPointer传递

The*_*ayr 1 ios ios5 automatic-ref-counting

我正在尝试将SFHF钥匙串类(从这里开始)与IOS 5项目一起使用.我成功转换了大部分课程,以遵守新的ARC规则.

我对代码的一小部分有一些麻烦,如下所示

OSStatus status = SecItemCopyMatching((CFDictionaryRef) objc_unretainedPointer(attributeQuery), (CFTypeRef *) objc_unretainedPointer(&attributeResult)
Run Code Online (Sandbox Code Playgroud)

这给出了以下语法问题:

warning: Semantic Issue: Incompatible pointer types passing 'NSDictionary *__strong *' to parameter of type 'id'
Run Code Online (Sandbox Code Playgroud)

我对iOS开发很陌生,这让我现在非常难过.任何帮助是极大的赞赏.

bbu*_*bum 6

这是API的声明:

OSStatus SecItemCopyMatching (
   CFDictionaryRef query,
   CFTypeRef *result
);
Run Code Online (Sandbox Code Playgroud)

result是一个按引用传递的返回值.

声明一个类型的局部变量CFTypeRef,调用该函数并根据API传递所述本地的地址,然后在函数调用之后执行任何ARC特定的恶作剧.


是的 - 错误是正确的.您没有传递CFTypeRef,您正在传递CFTypeRef*并且objc_unretainedPointer()不知道如何处理它.

做类似的事情:

CFTypeRef localResult
SecItemCopyMatching(query, &localResult);
if (... no error ...) {
   result = objc_retainedObject(localResult);
}
Run Code Online (Sandbox Code Playgroud)