始终从Core Data获取或将所有对象保留在内存中?

时间:2017-10-08 14:13:52

标签: swift core-data

在我的iOS应用程序中,我使用了几个Core Data实体,并在每个实体中存储了大约50到300个对象。我没有直接使用NSManagedObjects,而是使用这样的自定义类:

class Device {

     var object: NSManagedObject?

     var isFavorite: Bool {

          didSet {

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

         }
     }    
}

在应用的某些视图中,我只想要isFavorite == true的对象,因此我在NSFetchRequest中使用谓词制作ViewDidLoad。在其他视图中,我希望实体中存储所有对象,因此我创建了一个新的NSFetchRequest,但没有谓词。

问题在于,这不是非常有效,并且在呈现视图时会导致第二次延迟(因为我在ViewDidLoad中获取)。对此的一个解决方案是异步提取,但我想知道是否有更有效的方法。

由于我总是需要相同的2-3个实体,但只需要不同的谓词,在应用加载时获取所有实体是有意义的,将所有对象保留在内存中并在ViewDidLoad中循环遍历它们以删除它们在这种观点中不需要?目前我在每一个视图(总共10-15)中都取得了进展,所以从记忆中工作似乎是一个好主意。

有什么想法?建议非常感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

如果对于相同的数据,数据提取发生超过15次,那么最好一次获取它并在需要时使用它。如果您在任何时候更改了所有数据库值,则可以进行数据库调用并刷新数据。