Swift 始终从核心数据中提取还是将所有对象保留在内存中?
在我的iOS应用程序中,我使用几个核心数据实体,每个实体中存储大约50到300个对象。我没有直接使用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")
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时看到的延迟应该得到解决。