0

アプリが Facebook から画像を取得するアプリケーションに取り組んでいます。コアデータを使用して画像を保存しています。関数を使用dispatch_asycして画像を Core Data に保存します。私が使う

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)

メインスレッドがブロックされないように画像を保存します。

しかし、アプリがフリーズして応答しないことが時々ありました。アプリのさまざまな場所で画像をコア データに保存するのと同じ方法を使用します。たとえば、ユーザーが署名済みのユーザー プロファイルに移動すると、アプリはアルバムの写真を同じ方法で保存します。また、ユーザーが任意の画像の全画面表示に移動すると、同じ方法でコメント、いいね、保存の取得が開始されます。

プライベート キューを使用し、同じものを保存に使用すると、アプリはフリーズしません。

アプリの多くの場所でグローバル キューを使用しているため、アプリがフリーズするのはこれが原因ですか?

ありがとう。

4

2 に答える 2

2

ここで同時実行性に関するコア データ プログラミング ガイドのセクションを読む必要があります。それを作成したスレッドの外部で managedObjectContext にアクセスしているように思えますが、これは違法です。このタスクを実行するには、performBlock で子コンテキストを使用する方がよいでしょう。このようなもの:

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setParentContext:parentContext];
[context performBlock:^{
   //Save image
}];
于 2013-05-04T16:28:44.300 に答える