2010-12-16 66 views
1

一個蘋果公司的網站上讀取數據,還有的建議圖案使用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]; 
    }); 
} 

你如何處理與鎖和關鍵部分與GCD當你有一個生產者線程一次添加大量推文,而不是一個接一個,你需要一次讀取一條推文給UITableView的cellForRowAtIndexPath?

如果您在每次「讀​​取」中保留「同步」,是不是會導致大量不必要的數據塊?這真的寫了一段時間,但經常閱讀場景..

回答

1

如果等待時間是一個問題,也許生產者應該一個一個地添加推文,所以來自UI線程的dispatch_sync調用保持響應。

我不會擔心「很多不必要的塊」,除非/直到分析顯示塊調度開銷實際上是一個問題。畢竟,cellForRowAtIndexPath只會被稱爲可見的單元格,所以「經常閱讀」意味着每秒幾十次,而不是幾千或幾百萬次。