1

在 Cocoa 中,我使用以下代码获取应用程序的窗口数组:

CFArrayRef windows;
AXError gettingWindowsResult = AXUIElementCopyAttributeValues(app, (CFStringRef)NSAccessibilityWindowsAttribute, 0, 999, &windows);

然后我检查这些窗口的一些值,并将AXUIElementRef其中一个窗口的值保存在我班级的变量中。在方法结束时,我释放CFArrayRef以确保我没有任何内存泄漏:

if (windows != nil)
{
    CFRelease(windows);
}

虽然这使得当我尝试使用我保留的窗口时,我得到了一个糟糕的访问错误。所以我的问题是:我有必要释放数组吗?如果是这样,我该如何防止错误的访问错误?

4

1 回答 1

0

AXUIElementRef为什么不制作要保留的元素的 " " 的保留副本?

要做到这一点,找出你想要保留的元素的索引,然后再次调用“ AXUIElementCopyAttributeValues”函数,只是这次只传递你想要的元素的索引和 1 的“ maxValue”。例如,对于位置 26 的元素:

AXError gettingWindowsResult = AXUIElementCopyAttributeValues(app, (CFStringRef)NSAccessibilityWindowsAttribute, 26, 1, &arrayOfOne);

然后您可以安全地调用“ ”数组CFRelease上的“ ”。windows

于 2012-07-02T22:49:27.467 回答