使用自动引用计数(ARC)进行指针转换的问题

Che*_*tan 8 cocoa objective-c automatic-ref-counting

我的项目正在使用自动引用计数,我正在尝试使用以下Accessibility API函数:

extern AXError AXUIElementCopyAttributeValue (
    AXUIElementRef element,
    CFStringRef attribute,
    CFTypeRef *value);
Run Code Online (Sandbox Code Playgroud)

要调用该函数,我正在做这样的事情:

NSArray *subElements = nil;
AXUIElementCopyAttributeValue(..., (CFArrayRef *)&subElements);
Run Code Online (Sandbox Code Playgroud)

但是,ARC对最后一个参数抛出以下错误:

error: Automatic Reference Counting Issue: Cast of an indirect pointer to an Objective-C pointer to 'CFArrayRef *' (aka 'const struct __CFArray **') is disallowed with ARC
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Tom*_*mmy 11

您是否尝试过使用中间CFArrayRef,这样您仍然可以将指针传递给ref(即指向指针的指针)AXUIElementCopyAttributeValue,但是可以通过普通的转换来实现免费桥接?例如

CFArrayRef subElementsCFArray;
AXUIElementCopyAttributeValue(..., &subElementsCFArray);

NSArray *subElements = (__bridge NSArray *)subElementsCFArray;
Run Code Online (Sandbox Code Playgroud)

  • 你的理论是正确的,但实施是错误的.我已经更新了您将使用ARC实际编译的代码的答案.谢谢! (3认同)