簡體   English   中英

快速限制陣列容量的有效方法是什么?

[英]What would be more efficient for limiting array capacity in swift?

因此,我偶然發現了這里的喜憂參半。 我的應用程序的增長速度超出了預期,我注意到性能開始下降。 這是一種社交媒體,用戶數據存儲在Firebase中。 在viewDidLoad上,我將用戶數據解析為表視圖。 我有數百條記錄必須從Firebase加載到設備上,現在我想限制“表視圖”(100)中顯示的用戶數量。

因此,對於我的問題:
哪個是更好的性能選擇? 只是簡單地將numberOfRowsInSection限制為100? 或刪除索引100之后我的用戶數組中的所有元素?

如果是第二種選擇,我該怎么做呢? 不幸的是,我最初需要存儲在數組中的用戶數據,以便可以對它們進行排序,但是在排序之后,我想在某個索引之后刪除數組中的每個元素。 (我知道這看起來很奇怪,我將在稍后修復代碼並使之更加平滑)。

謝謝!

理想情況下,您希望在服務器端處理此問題。 因此,當您為用戶數據調用端點時,它將處理排序,並且最多返回100個項目。

如果您不想執行此操作,而只是在兩個選項之間進行選擇,則建議您在排序后不需要的情況下刪除100個元素。 根據每個對象的大小,這可能會釋放相當大的內存。 要在100后輕松移除物品,您可以使用以下方法:

myArray.removeRange(100..<myArray.count)

一般而言,只要您有一個由某種昂貴的數據存儲(帶有任意數量的條目)支持的表視圖或集合視圖(無論是數據庫還是REST調用或其他任何形式),您都希望對加載進行分頁並在以下情況獲得更多記錄用戶滾動。 例如,當您轉到Facebook feed時,您當然不希望加載所有Facebook帖子。 僅加載最新的提要項,並且在滾動時,視圖控制器會請求服務器提供更多數據,因此您可以無限滾動。

    func refresh() {
        if isLoading == false {
            isEndOfData = false
            currentPage = 0
            loadPage(currentPage)
        }
    }

    func loadPage(_ page: Int) {
        isLoading = true
        Notification.getPage(currentPage, pageSize: pageSize) { error, notifications in
        //Handle API call here
        }
    }

    func loadNextPage() {
        if isLoading == false  && isEndOfData == false {
            currentPage += 1
            loadPage(currentPage)
        }
    }

    //MARK: UIScrollViewDelegate
    extension NotificationViewController: UIScrollViewDelegate {
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            let currentOffset = scrollView.contentOffset.y
            let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
            if (maximumOffset - currentOffset) <= GlobalConstants.paginationScrollOffset {
                loadNextPage()
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM