2

NSCoder でエンコードされたルート オブジェクトを取り戻しましたが、この返されたオブジェクトをメモリ管理する方法がわかりません。自動解放プールで囲みましたが、オブジェクトはプールと一緒に出ません。Code Here, see line 289 行とコードは Git Hub のコミットによって変更される可能性がありますが、最終的には動作するコードに答えが表示されます。

以来:

デコードされたオブジェクトの割り当てを完全に解除する保証された方法は何ですか?

4

2 に答える 2

1

から返されたメモリを管理していますNSKeyedArchiver.

明示的に保持し、完了したら release を呼び出すか、ファイルへの書き込みなど、すぐに使用する必要があります。

Objective-Cのメモリ管理ルールを再確認することをお勧めします

手動のメモリ管理は、最初は少しトリッキーですが、ルールを理解すれば、このような状況を非常に簡単に解決できます。

ここで、メモリがすぐに削除されるようにする必要がある場合は、 alloc:init パターンに従う独自のバイナリ シリアライザーを記述して、呼び出し元が明示的にメモリを所有するようにする必要があります。そうすれば、オブジェクトで release を呼び出すと、割り当てが解除されます。

于 2013-01-15T01:08:29.050 に答える
0

NSCoder はそのリリース プールに属していません。

于 2013-01-15T01:06:21.380 に答える