我有一个关于sqlite的问题,但我在这里找不到答案,也许你可以回答我或在这里发布一篇文章,这对许多其他像我这样的新开发人员会有所帮助。
问题是关于使用sqlite和CoreData时的速度。
当我们使用CoreData时,我们可以使用NSFetchedResultsController,它使内存的使用更加高效。
当我们使用 sqlite 时,没有 NSFetchedResultsController 这样的东西,在我看来有两种方法:
-
在某个数组中加载 viewDidLoad 中 sqlite 数据库中的所有数据,然后在 tableView:cellForRowAtIndexPathPath 中使用此数组:使用 indexPath.row 作为数组索引显示数据 - 加载所有数据 我想到的坏主意
-
获取 viewDidLoad 中的行数以在 numberOfRowsInSection 中使用它,然后在 tableView:cellForRowAtIndexPath: 中仅加载所需的数据:使用这样的查询 [NSString stringWithFormat: "select id, name from myTable limit 1 offset %d", indexPath.row];
方式 2 是一个好主意还是每次都对 sqlite 进行查询以显示数据是一个坏主意?如果没有,哪种方式使用更快?
谢谢。
我认为这取决于您的数据大小。
如果尺寸很小,则方式 1 会更好。
如果你必须使用 sqlite,为什么不在可以显示 20 行时一次加载 30 行,然后当你发现用户滚动到第 25 行时,你再加载 30 行。类似的东西。
我更喜欢核心数据。
您希望使用滑动数组样式缓存并使用 1 以外的限制,这样您就不会经常执行读取。 因此,如果您向缓存请求一行并且它不存在,您会在 N 行块中读取,期望需要进一步滚动。
或者不要一次重新发明一个类的CoreData,而只使用CoreData和NSFetchedResultsController
。 :)