2010-12-16 7 views
1

一つのAppleのサイトのためのデータ読み出しは、代わりにロックのGCDキューを使用するための提案のパターンがあります:あなた、あなたがGCDとロックとクリティカルセクションに対処するにはどうすればよいGCDキュー:テーブルビューのcellForRowAtIndexPath

// 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]; 
    }); 
} 

UITableViewのcellForRowAtIndexPathのために一度に1つのツイートを読む必要があるプロデューサースレッドを、一度にたくさんのツイートを一度に追加しますか?

それぞれの「読み取り」に「同期」を保存した場合、不要なブロックが多く発生しませんか?

答えて

1

遅延が懸念される場合、プロデューサーはつぶやきを1つずつ追加する必要があります。そのため、UIスレッドからのdispatch_sync呼び出しは応答可能なままです。

プロファイリングでブロックディスパッチのオーバーヘッドが実際に問題であることが示されるまで、「たくさんの不要なブロック」は心配しません。結局、cellForRowAtIndexPathは可視セルに対してのみ呼び出されるため、「頻繁に読み込む」とは、何千も何百万というものではなく、数十秒のようなものを意味します。

関連する問題