2011-01-19 22 views
0
[myArray addObject:myObject]; 
[object release]; 

obvjective cでは、保持カウント1のオブジェクトを配列に追加するたびに、リークを防ぐために直後に解放する必要があります。コアデータ - メモリ管理?

これはNSManagedObjectsに適用されますか? myObjectは、私が「EXC_BAD_ACCESS」

答えて

2

Memory Management Programming Guideをお読みください。これは、あなたが将来持っているこの質問とメモリ管理の質問に答えるでしょう。

この質問に直接回答するには:あなたが所有するのオブジェクトである必要があります。releaseまたはautoreleaseではなく、releaseまたはautoreleaseのオブジェクトを所有している必要があります。 retainを呼び出すか、alloc/new/copyを使用してオブジェクトを取得すると、オブジェクトを所有しています。

releasingについては、アレイに追加する際にブランケットルールはありません。コードで

+0

ありがとう、私はNSManagedObjectインスタンスを所有していないことを知ったので、私はそれをリリースするとは思わない。 – aryaxt

0

あなたの毛布文を取得NSManagedObjectのインスタンスである場合は、上記のコードでオブジェクトを解放することは絶対に間違っているので。実際、オブジェクトの保持カウントについて考えることさえ間違っています。オブジェクトを所有していて、所有しているオブジェクトへの参照を削除する場合は、そのオブジェクトを解放する必要があります。それが基本ルールです。オブジェクトを所有していない場合は、そのオブジェクトを解放するビジネスはありません。詳細は、Cocoa Memory Management Programming Guideをご覧ください。

「Core Dataオブジェクトのメモリ管理はほかのものと同じですか?」というコアの質問については、答えは「はい」です。コアデータそのものはさまざまなオブジェクトに保持されていますが、フォールディング動作にはいくつかの複雑さがありますが、所有ルールは他のココアとまったく同じです。

0

ルック:あなたは

[myArray addObject:myObject]; 
[object release]; //!!!What is object? 

を意味しましたか?

[myArray addObject:myObject]; 
[myObject release]; 

Cocoa Memory Management Programming Guideは必須です。 全体を読まない場合は、Memory Management Rulesが最も重要な部分です。

コアデータを使用する場合、通常同じメモリ管理ルールを適用しますが、some caveatsがあります。