1

Cocoa では、次のコードを使用してアプリのウィンドウの配列を取得します。

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

次に、それらのウィンドウのいくつかの値をチェックし、AXUIElementRefそのうちの 1 つの値をクラスの変数に保持します。メソッドの最後で、CFArrayRefメモリ リークがないことを確認するために を解放します。

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

これにより、保持したウィンドウを使用しようとすると、不正なアクセスエラーが発生します。私の質問: アレイを解放する必要がありますか? もしそうなら、どうすれば不正なアクセスエラーを防ぐことができますか?

4

1 に答える 1

0

AXUIElementRef保持したい 1 つの要素の " " の保持コピーを作成してみませんか?

これを行うには、保持したい要素のインデックスを見つけてから、" AXUIElementCopyAttributeValues" 関数をもう一度呼び出します。今回は、必要な要素のインデックスと 1 の " " を渡すだけmaxValueです。たとえば、 26 番目の要素:

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

CFReleaseこれで、" windows" 配列で " "を安全に呼び出すことができます。

于 2012-07-02T22:49:27.467 に答える