Swift 始终从核心数据中提取还是将所有对象保留在内存中?

Swift 始终从核心数据中提取还是将所有对象保留在内存中?,swift,core-data,Swift,Core Data,在我的iOS应用程序中,我使用几个核心数据实体,每个实体中存储大约50到300个对象。我没有直接使用NSManagedObjects,而是使用如下自定义类: class Device { var object: NSManagedObject? var isFavorite: Bool { didSet { object?.setValue(isFavorite, forKey: "isFavorite")

在我的iOS应用程序中,我使用几个核心数据实体,每个实体中存储大约50到300个对象。我没有直接使用
NSManagedObjects
,而是使用如下自定义类:

class Device {

     var object: NSManagedObject?

     var isFavorite: Bool {

          didSet {

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

         }
     }    
}
在应用程序的某些视图中,我只希望对象具有
isFavorite==true
,因此我在
ViewDidLoad
中创建一个带有谓词的
NSFetchRequest
。在其他视图中,我希望所有对象都存储在实体中,因此我创建了一个新的
NSFetchRequest
,但没有谓词

问题是,这不是很有效,在显示视图时会导致瞬间延迟(因为我获取
ViewDidLoad
)。解决这个问题的一个方法是异步抓取,但我想知道是否有更有效的方法

由于我总是需要相同的2-3个实体,但只是使用不同的谓词,所以在应用程序加载时获取所有实体,将所有对象保留在内存中,并在
ViewDidLoad
中循环它们以删除此视图中不需要的实体,这有意义吗?目前,我正在抓取每一个视图(总共10-15个),因此从内存中工作似乎是个好主意


有什么想法吗?非常感谢您的建议,谢谢

如果同一数据的数据提取次数超过15次,则最好提取一次并在需要时使用。如果您的所有数据库值在任何时候都发生了更改,您可以拨打db电话并刷新数据。

谢谢您的建议!但是,我想知道循环所有对象并删除未使用的对象是否是一个好主意。这与使用NSPredicate基本相同,但这不是更需要资源吗?我建议这样做是因为相同的数据在不同的ViewController上被反复读取。试试下面的方法,我很确定你在切换ViewController时看到的延迟应该得到解决。