SQLite在iOS上的应用程序生命周期中的持久性

时间:2011-01-11 11:54:19

标签: ios sqlite

我一直在阅读iOS固件中包含的SQLite3,它可能满足我对我正在编写的应用程序的需求。

我无法弄清楚的是,它是否持久存在或像某些物体一样消失。

例如,如果我sqlite3_open()看似是C函数而不是Objective-C对象,如果我在应用程序开始时打开它,它会保持持久性,直到我关闭它,无论如何我推动/弹出很多观点。

显然,这取决于我把它放在哪里但是如果我正在做一个通用的应用程序并且有一些中心功能来加载/保存iPhone / iPad上常见的数据,如果在我的didFinishLoading:我调用打开SQLite数据库,然后调用各种exec查询,它会在应用程序的整个生命周期内保持持久性。

我最好根据需要打开和关闭,我来自PHP背景,所以我通常在脚本开始时打开一个数据库,然后运行许多查询,最后在浏览器输出之前关闭它。 / p>

从我在过去几个月里学到的关于iOS编程的第1,000,000个内容来看,我认为后者可能是更好的方式,因为应用程序可能会过早退出或者它会落后于背景。

我想就我的想法提出第二意见。

2 个答案:

答案 0 :(得分:0)

我不直接知道,但我认为你是对的 - 你只需要在应用程序开始时打开它一次。

查看sqlitepersistentobjects,一个适用于iOS的ORM框架,它首次使用时只有opens the DB,除非打开它时出现问题,否则永远不会关闭它:)

答案 1 :(得分:0)

应用程序中不同位置的应用程序中使用的单个打开的sqlite数据库很好。

你正在使用令人困惑的词“持久”。你的意思是“重用单个连接,用于在应用程序中执行不同的语句,可能来自不同的线程”。持久性在数据库环境中具有完全不同的含义 - 这意味着所请求的数据修改已安全地存储到介质(磁盘,闪存驱动器),甚至可以意外关闭设备而不会影响写入数据。

建议从单个专用线程继续运行sqlite语句。

不建议从不同进程连接到sqlite数据库并执行并行修改。

一个很好的替代解决方案是使用sqlite异步扩展,它将所有写入发送到专用的后台线程。

如果您想使用自定义构建(较新版本)的sqlite,可以查看https://github.com/mirek/CoreSQLite3框架。