Cocoa从数组中保留单个对象

时间:2012-07-02 19:39:17

标签: xcode arrays cocoa

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

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

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

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

虽然这使得当我尝试使用我保留的窗口时,我得到了一个错误的访问错误。所以我的问题是:我是否有必要发布阵列?如果是这样,我该如何防止错误访问错误?

1 个答案:

答案 0 :(得分:0)

为什么不保留要保留的一个元素的“AXUIElementRef”的保留副本?

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

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

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