ロックの代わりにGCDキュー:TableViewのCellForrowatindexpathのデータを読む
-
10-10-2019 - |
質問
1つのAppleのサイト、ロックの代わりにGCDキューを使用するための提案パターンがあります。
// Create queue early
queue = dispatch_queue_create("com.example.tweets", NULL);
// executed main thread
- (NSArray *)getTweets
{
__block NSArray *a;
dispatch_sync(queue, ^{
a = [tweets copyTweets];
});
return a;
}
// executed on background thread
- (void)addTweet:(Tweet *)tw
{
dispatch_async(queue, ^{
[tweets addTweet:tw];
});
}
プロデューサーのスレッドが一度に1つずつではなく、一度に多くのツイートを追加している場合、GCDを使用したロックと重要なセクションにどのように対処しますか。
「読み取り」ごとに「同期」を保持していた場合、それは多くの不要なブロックを引き起こしませんか?これは本当に時々書くことがありますが、頻繁にシナリオを読んでください。
解決
遅延が懸念事項である場合、プロデューサーはツイートを1つずつ追加する必要があるため、UIスレッドからのDispatch_Sync呼び出しは応答性の高いままです。
プロファイリングが実際に問題であることがプロファイリングが示されない限り、「多くの不必要なブロック」について心配することはありません。結局のところ、CellForrovatindexpathは目に見える細胞に対してのみ呼び出されるため、「頻繁に読む」は、数千または数百万人ではなく、数十倍のようなものを意味します。
所属していません StackOverflow