NSMutableArrayで次のエラーが発生します。
-[Not A Type release]: message sent to deallocated instance 0x1006e29c0
それはこの行で起こります:
[_array removeAllObjects];
これで、エラーの意味は理解できましたが、この場合にエラーが発生する理由はわかりません。
上記の行の直前にNSLogを次のように追加しました。
NSLog(@"%@", [_array class]);
そして、これは正常に実行され、正しい動作で、これはログです:
2013-03-13 11:19:27.366 App[66921:303] __NSArrayM
2013-03-13 11:19:27.367 App[66921:303] *** -[Not A Type release]: message sent to deallocated instance 0x1006e29c0
したがって、削除する直前に、割り当てが解除されていないようです。
removeAllObjects呼び出しを削除して以下の行に置き換えても、同じエラーが発生します。
_array = [[NSMutableArray alloc] init];
コードの他の場所で行っているのは、[_ array addObject:...]を呼び出すことだけです。
_arrayは強力なプロパティです:
@property (strong) NSMutableArray *array;
配列は最初にinitメソッドで初期化されます。
編集:私は次のようにこの配列にAXUIElementRefsを追加しています:
[_array addObject:(__bridge_transfer id)elementRef];
__bridge_transferがそれをARCに引き継ぐと思いましたが、それを管理する必要はありませんか?
何が問題なのですか?
更新:サンプルプロジェクトは次のとおりです:http://users.telenet.be/prullen/AXMemory.zip
__bridge_transferではなく__bridgeを使用しているため、これは作業中のプロジェクトです。
このプロジェクトには、同じことを何度も繰り返す単純なループが含まれています。これは、__ bridgeだけでは、AXUIElementRefsがリリースされないことを示すためです。彼らは記憶にとどまります。それは私がInstrumentsプロファイラーにも見ているものです。また、アクティビティモニターを介して、メモリ使用量が数秒ごとに増加していることを確認できます。
AXUIElementRefsはAXUIElementCopyMultipleAttributeValuesを介して取得されたので、私はそれらの所有権を持っていると思いますか?それでも、__ bridge_transferに変更すると、上記のエラーが発生します。
誰かがこれを見て、私が間違っていることを私に知らせてくれるなら、それは大いにありがたいです。
次のステートメントを介してプロパティの配列を取得します:(行60)。
AXUIElementCopyMultipleAttributeValues(frontWindowRef, attributes,0,&attributeValues);
110行目AXUIElementを割り当てます(子配列をループします)。
element = CFArrayGetValueAtIndex(childrenArrayRef, i);
112行目は、AXUIElementRefを配列に追加する場所です。
[_array addObject:(__bridge id)(element)];
36行目は、500要素を超える場合に空にする場所です。
if ([_array count] > 500) {
[_array removeAllObjects];
}