2016-09-02 34 views
0

我正在學習如何使用NSOperation和NSOperationQueue爲我的網絡調用在我的應用程序的表視圖中提供更具響應性的用戶界面。在swift中使用帶無限滾動表視圖的領域

網絡操作的結果被存儲到領域並顯示在表視圖中。

這是一個無限的滾動表視圖,隨着用戶獲得最終結果,更多的數據被拉入應用程序。

我想知道什麼是最好的設計範例在這裏使用,以及清除領域的最佳位置在哪裏。我不想用無用的數據誇大應用程序。我只想讓他們在沒有網絡(飛行模式)的情況下重新登錄數據。

我也想知道觸發這些網絡操作的最佳位置在哪裏?可能是cellForRowAtIndexPath?我不確定,因爲我通常只使用Alamofire並在viewDidLoad中觸發網絡請求。但這些不是可取消的電話。

我已經通過了關於ray wenderlich的偉大教程,但其他的操場示例中,我仍然沒有得到一個真實世界的應用程序教程。如果有人對這個問題一個很好的瞭解讓我知道

感謝

回答

1

這可能是棘手的回答,因爲這一切都取決於你的應用程序,大小/數據類型它顯示的時間和頻率要執行網絡提取。最後,它很可能是「感覺良好」和需要消耗多少系統資源才能實現的妥協。

在這個特定的場景中,Realm被用作一個緩存機制,沒有更多,所以何時清除它應該可能取決於你希望如何清除它。

如果我正在構建一個這樣的系統,我會決定一些最新的項目,我總是希望有這些項目並將它們保存在Realm中。如果用戶決定開始向下滾動,那麼更多的數據將被下載並附加到Realm數據庫中。最終用戶會感到疲倦並回滾到頂部(或者他們甚至可能只是退出應用程序並從頂部重新開始)。此時,觸發一個操作來檢查Realm緩存的大小並根據需要刪除儘可能多的項以使其恢復到所需大小是合適的。如果他們再次開始向下滾動,則只需重新下載該數據即可。

不同於SQLite,其中項目被複制到內存中,Realm非常擅長從磁盤映射延遲加載資源,因此不必擔心內存中Realm項目的數量,更多隻是Realm文件的大小在磁盤上,這又取決於你下載的數據有多大。

至於何時觸發其他網絡操作請求更多的數據,最好在tableView(_:willDisplay:forRowAt:)。根據要下載的數據的大小(以及表格單元格的大小),您應該使用它,直到以非常正常的速度滾動時感覺自然。作爲一個起點,我建議在觸及滾動視圖的底部之前,先着手整個屏幕的表格單元格。

祝你好運!

相關問題