我有一个通过引用返回NSError对象的函数:
NSData *foo(NSData *foo, NSError *__autoreleasing *outError);
此函数使用一个API,该指针指向CFErrorRef的存储指针。我想直接将outError
传递给基础函数,但我无法弄清楚声明关键字和投射关键字的正确组合,以使clang同意该计划。有吗?
答案 0 :(得分:3)
如果你看一下clang notes for __autoreleasing
,它会提到魔术在分配时发生,这意味着自动施法在这里无济于事。您需要使用原始帖子的评论中提到的临时变量来实际进行分配。
答案 1 :(得分:0)
试试这个:
<强> NSError + CFErrorRef.h 强>
@interface NSError (CFErrorRef)
- (CFErrorRef) cferror;
@end
<强> NSError + CFErrorRef.m 强>
#import "NSError+CFErrorRef.h"
@implementation NSError (CFErrorRef)
- (CFErrorRef) cferror
{
CFStringRef domain = (CFStringRef) self.domain;
CFDictionaryRef userInfo = (__bridge CFDictionaryRef) self.userInfo;
return CFErrorCreate(kCFAllocatorDefault, domain, self.code, userInfo);
}
@end
我写了一个快速的小单元测试,以验证转换过的所有内容,它似乎正常工作。然后,您只需在NSError对象上执行以下选择器
CFErrorRef e = [error cferror];