2017-10-08 77 views
0

在我的iOS應用程序中,我使用了多個Core Data實體,並在其中每個實體中存儲了大約50到300個對象。而不是與NSManagedObjects直接合作,我用自定義類這樣的:始終從核心數據獲取或保留所有對象在內存中?

class Device { 

    var object: NSManagedObject? 

    var isFavorite: Bool { 

      didSet { 

       object?.setValue(isFavorite, forKey: "isFavorite") 

     } 
    }  
} 

在應用程序中的一些觀點,我只想用對象isFavorite == true,所以我做的NSFetchRequestViewDidLoad謂詞。在其他視圖中,我希望所有對象都存儲在實體中,因此我創建了一個新的NSFetchRequest,但沒有謂詞。

事情是,這是不是很有效率,並導致展示視圖時分裂第二延遲(因爲我在ViewDidLoad獲取)。對此的一個解決方案是異步獲取,但我想知道是否有更有效的方法。

因爲我總是需要那些相同的2-3個實體,但只是具有不同的謂詞,當應用程序加載時,是否有意義獲取所有實體,將所有對象保留在內存中,並在ViewDidLoad中循環以刪除那些不需要的這個觀點?目前,我從字面上看每一個視圖(總共10-15),所以從記憶中工作似乎是一個好主意。

有什麼想法?建議非常感謝,謝謝!

回答

1

如果相同數據的數據獲取發生超過15次,那麼最好取一次並在需要時使用它。如果所有數據庫值在任何時候都發生更改,則可以進行數據庫調用並刷新數據。

+0

感謝您的諮詢!不過,我想知道是否循環遍歷所有對象並刪除未使用的對象是個好主意。這與使用NSPredicate基本相同,但是這不是更耗資源? –

+1

我建議這樣做,因爲在不同的ViewController上一遍又一遍地讀取相同的數據。嘗試以下方法,我非常確定在切換viewControllers時應該解決的滯後問題。 –

相關問題