我正在爲iOS開發聊天應用程序。該應用程序將允許用戶創建聊天室並與聊天室中的成員聊天(如IRC聊天室)。iOS:使用CoreData的聊天應用程序
該應用程序的流程是;
- 用戶可以加入聊天室
- 信息將被存儲在coradata支持的SQLite DB
- 有當地消息沒有提及,並在服務器上的消息(所有這些都涉及到了 消息特定用戶只能存儲在他的本地數據庫中)
- 我正在使用NSFetchResultController更新並刷新聊天 表。收到聊天時,它將被存儲到數據庫,表格視圖將加載新聊天。
- 所有的核心數據操作都在主線程中完成
- 的
batchsize
用於提取請求是20和performfetch
方法被稱爲在viewDidLoad
問題
- 當聊天收到UI掛起了一段時間(1 - 在iPhone 4中2秒)。 (如果我暫停執行它表明, 東西在[tableview中endUpdate]發生在取數據控制器 代表)
- 要轉到最新聊天在聊天視圖當前用戶必須 負荷全部由DB的聊天記錄
問題
有沒有更好的辦法來處理這個要求?可以使用fetchresultcontroller嗎?
我怎樣才能以分頁的方式加載聊天 - 比如什麼sup或 viber - 使用
fetchresultcontroller
。- 如果我使用背景模式與多個託管對象上下文會有任何性能改進?
我不太確定。如何插入一個新的行並獲取它,需要1到2秒?這應該是足夠快的主線程,我認爲還有其他事情正在進行。 –
核心數據,特別是'NSFetchedResultsController',不僅「插入和提取」模型。它查詢部分對象,監視更改,在需要模型屬性值時觸發故障,處理更改,保存到磁盤等等。如果你在主線程上進行更新和保存,你會不必要地阻塞所謂的只讀「NSFetchedResultsController」。 –
是的,我知道它是這樣做的,但根據我的經驗,它發生在微秒而不是秒。我在後臺線程上使用了一個單獨的上下文來處理緩慢的事情(例如:在數據庫中插入3000個新條目),但我不需要打擾大部分時間。通常情況下,更改速度足夠快,可以在主線程上完成。 –