在Cocoa中,我使用以下代码获取应用程序的窗口数组:
CFArrayRef windows;
AXError gettingWindowsResult = AXUIElementCopyAttributeValues(app, (CFStringRef)NSAccessibilityWindowsAttribute, 0, 999, &windows);
然后我检查这些窗口的某些值,并将其中一个窗口的AXUIElementRef
保存在我班级的变量中。在方法结束时,我释放CFArrayRef
以确保我没有任何内存泄漏:
if (windows != nil)
{
CFRelease(windows);
}
虽然这使得当我尝试使用我保留的窗口时,我得到了一个错误的访问错误。所以我的问题是:我是否有必要发布阵列?如果是这样,我该如何防止错误访问错误?
答案 0 :(得分:0)
为什么不保留要保留的一个元素的“AXUIElementRef
”的保留副本?
要做到这一点,找出你想要保留的元素的索引,然后再调用“AXUIElementCopyAttributeValues
”函数,这次只需要传递你想要的元素的索引,并且“ maxValue
“的1.例如,对于位置26的元素:
AXError gettingWindowsResult = AXUIElementCopyAttributeValues(app, (CFStringRef)NSAccessibilityWindowsAttribute, 26, 1, &arrayOfOne);
然后,您可以安全地在“CFRelease
”数组上调用“windows
”。