これは私がいつも聞きたかった質問です。プロファイラーでiOSアプリケーションを実行して割り当ての問題を探していると、NSManagedObjectが使用および表示された後も長い間メモリに残り、リコールしたUIViewControllerの割り当てが解除されていることがわかりました。もちろん、UIViewControllerが再度割り当てられた場合、その数は増えていません。これは、リークがなく、CoreDataによる何らかのオブジェクトの再利用があることを示しています。
名前として「mobjc」が指定されたMyManagedObjectクラスがある場合、プロファイラーで次の数が増加していることがわかります。
MyManagedObject_mobjc_
数は変わる可能性があり、少量のデータ、たとえばsqlliteの100オブジェクトの場合、その制限まで増加し、そこにとどまります。
ただし、アプリケーションのライフサイクル中にオブジェクトの割り当てが解除されることもあるようです。そのため、CoreData自体が何らかのメモリ最適化を行っていると思います。また、ライブバイトサイズが小さいため、オブジェクト全体が保持されるのではなく、オブジェクトの「障害」が保持されるようです(私の英語はご容赦ください:-))。タフな多くの障害オブジェクトでさえ、メモリを占有します。
しかし、この時点で私はいくつかの確認をしたいと思います:
- CoreDataは本当にメモリ内のオブジェクトを管理および最適化していますか?
- アプリケーションが保持するオブジェクトをできるだけ少なくするためにできることはありますか?
- 上記の点に関連して、私は本当にこの問題に対処する必要がありますか?
- この特定の主題が説明されている、おそらくAppleによるリンクがありますか?
おそらくそれは関連性があります、私がテストに使用したアプリはARCとiOS5.1に依存しています。
ありがとう