スレッド化されたNSOperationでいくつかのコアデータ操作を実行しようとすると、多くの問題が発生します。
現在、スレッド化されたNSOperationsで純粋に使用される管理対象オブジェクトコンテキストをアプリデリゲートに作成しました。最大同時実行数が1のNSOperationQueueをセットアップして、各アクションがシリアルに実行されるようにします。操作(インターネットからデータを取得して新しい管理対象オブジェクトを作成する)ごとに、使用するコンテキストを渡します。新しいオブジェクトが作成されたら、次に使用する操作のためにコンテキストを保存してリセットします。ただし、これを実行しているときに断続的にmallocエラーが発生し、それを理解するために何日も費やしました。これは、スレッド化の方法と関係があるように見えます。
私が得ているエラーは、この関連するスタックオーバーフローの質問で見ることができます。
管理対象オブジェクトのプロパティをオブジェクトに設定しているだけで、mallocエラーが発生していNSNumber
ます。また、そのプロパティを設定するのは初めてなので、自分自身を解放しすぎているわけではありません。私はそれをまったく理解できず、GuardMallocを使用してエラーを再現することはできません、それは発生しません!トリガーされている他の場所でエラーが発生しているようですが、どこで発生しているのかわかりません。
私が推測できるのは、エラーがどういうわけか私がすべてを設定した方法に関連しているということです。に操作を追加するのではなく、自分で操作を実行しようとしましたが、NSOperationQueue
正常に動作しているように見えます(ただし、メインスレッドがハングします!)。
また、保存が行われたときにアプリ内の他のコンテキストに通知するためのコンテキストも必要なので、通知を確認しNSManagedObjectContextDidSaveNotification
ます。ただし、保存はNSOperation(他のスレッド)で実行されているため、通知は実行中のスレッドでのみディスパッチされるため、これに問題がありますか?