MST

星途 面试题库

面试题:Objective-C 数据持久化之Core Data 优化

在使用Core Data进行数据持久化时,如果遇到大量数据需要存储和检索,你会采取哪些优化措施?请从数据模型设计、获取请求优化、缓存策略等方面阐述,并举例说明。
37.8万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

数据模型设计

  1. 合理分层:将数据按照逻辑关系分层,比如将基础信息和详细信息分不同实体存储。例如,一个电商应用,商品基本信息(名称、价格)放一个实体,商品详细描述、规格等放另一个实体,通过关系关联。这样查询基本信息时无需加载大量详细数据。
  2. 避免冗余:减少重复数据存储,确保数据一致性。如订单实体和商品实体,商品信息在商品实体存储,订单实体通过关系引用,而非在订单实体重复存储商品详细信息。
  3. 正确设置属性类型:根据数据实际情况选合适属性类型。例如日期时间用Date类型,避免用字符串存储,可提高存储效率和查询性能。

获取请求优化

  1. 限制返回属性:只请求需要的属性,而非获取所有属性。如查询用户列表只需要用户名和头像,在NSFetchRequest设置propertiesToFetch。示例:
let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
fetchRequest.propertiesToFetch = ["username", "avatar"]
fetchRequest.returnsDistinctResults = true
  1. 分页处理:对于大量数据,按页获取。设置fetchLimit指定每页数量,fetchOffset指定偏移量。示例:
let fetchRequest: NSFetchRequest<Product> = Product.fetchRequest()
fetchRequest.fetchLimit = 20
fetchRequest.fetchOffset = pageIndex * 20
  1. 添加索引:对经常用于查询过滤的属性添加索引。例如用户表按手机号查询频繁,在手机号属性添加索引。在数据模型编辑器选中属性,勾选Indexed

缓存策略

  1. 内存缓存:使用NSCache在内存中缓存经常访问的数据。例如在一个新闻应用中,缓存最近浏览新闻的实体。示例:
let newsCache = NSCache<NSString, News>()
func getNewsFromCache(withId id: String) -> News? {
    return newsCache.object(forKey: id as NSString)
}
func cacheNews(_ news: News) {
    newsCache.setObject(news, forKey: news.id as NSString)
}
  1. 磁盘缓存:可定期将内存缓存数据持久化到磁盘,下次启动应用时可快速加载到内存。如利用文件系统将缓存数据写入文件。可在应用进入后台时执行磁盘缓存操作。