我看着這一切不對(主要是想繼承NSThread和它傳遞的數據/)。我沒有考慮適當地使用塊。
從本質上講,我在做什麼是:
loadStuff:(NSDictionary *)stuff {
// stuff is data from HTTP GET request
NSManagedObjectContext *context = // init context with NSPrivateQueueConcurrencyType
context.parentContext = // main context
[context performBlock:^{
// insert/update entities
// save context
}];
}
但後來我需要循環在後臺線程來更新實體:
//inside some method
dispatch_async(global_queue, ^{
// _currentTimestamp is updated by a delegate
NSInterval timestamp = _currentTimestamp;
while (run) {
if (timestamp != _currentTimestamp) {
// do calculation
// update entities if needed
// save context
}
}
});
獲取數據時,我這樣做。我需要的是根據應用程序狀態更新數據的單獨過程。因此,我獲取數據並使用'performBlock'並將數據保存在託管對象上下文中。根據廣播狀態的計算,應用程序廣播狀態信息和核心數據實體需要單獨更新。 – ravun
我有點困惑 - 你可以使用performBlock來更新核心數據。在「更新」的最後,讓performBlock再做一件事 - 比如在主隊列上排隊一塊,以更新可能可見的UI元素。如果您還有其他需要處理的內容 - 可能是從核心數據中提取數據,則可以對這些數據使用performBlock,並在主線程中對最後一個隊列進行排隊。你真的需要另一個隊列去做嗎?如果是這樣,則創建一個隊列,在其上發佈工作,完成之後將塊發送到主隊列以更新UI。不要建議使用NSOperation。 –
我已經想通了...問題是我來自java背景,正在考慮繼承NSThread,並且需要從主線程向它傳遞數據。我試圖避免使用塊(我習慣將所有內容封裝在單獨的類/文件中)。我認爲我讓這個過程比需要的更復雜。 – ravun