Постоянство SQLite на протяжении всего жизненного цикла приложения на iOS - PullRequest
2 голосов
/ 11 января 2011

Я читал о SQLite3, включенном в прошивку iOS, которая может удовлетворить мои потребности в приложении, которое я пишу.

Что я не могу понять, так это постоянство или исчезновение, как это делают некоторые объекты.

Например, если я сделаю sqlite3_open(), который представляется функцией C, а не объектом Objective-C, если я открою это в начале своего приложения, оно останется постоянным, пока я не закрою его, независимо от того, сколько просмотров Я толкаю / хлопаю повсюду.

Очевидно, что это будет зависеть от того, где я его поместил, но если бы я делал универсальное приложение и имел некоторые центральные функции для загрузки / сохранения данных, которые были бы общими для обоих iPhone / iPad, если в моем didFinishLoading: я поставил вызов, чтобы открыть базу данных SQLite, а затем вызвать различные запросы exec, будет ли он оставаться постоянным на протяжении всего жизненного цикла приложения.

или

Могу ли я лучше открывать и закрывать по мере необходимости, я исходил из PHP-фона, поэтому я обычно открывал базу данных в начале скрипта, затем выполнял много запросов и, наконец, закрывал ее перед выводом из браузера.

Из 1 000 000, которые я узнал за последние несколько месяцев о программировании для iOS, я думаю, что последний может быть лучшим способом, поскольку есть возможность преждевременного выхода из приложения или перехода в фоновый режим.

Мне просто хотелось бы получить второе мнение о моем мышлении, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Одна открытая база данных sqlite, используемая в приложении из разных мест вашего приложения, подойдет.

Вы используете слово "постоянный", которое сбивает с толку. Вы имеете в виду «повторное использование одного соединения для выполнения различных операторов в приложении, возможно, из разных потоков». Постоянство имеет совершенно другое значение в контексте баз данных - это означает, что запрошенная модификация данных была безопасно сохранена на носителе (диск, флэш-диск) и устройство может даже неожиданно завершить работу, не влияя на записанные данные.

Рекомендуется продолжать выполнять операторы sqlite из одного выделенного потока.

Не рекомендуется подключаться к базе данных sqlite из разных процессов и выполнять параллельные модификации.

Хорошим альтернативным решением является использование асинхронного расширения sqlite, которое отправляет все записи в выделенный фоновый поток.

Вы можете проверить https://github.com/mirek/CoreSQLite3 framework, если хотите использовать пользовательский (более новую версию) sqlite.

0 голосов
/ 11 января 2011

Я не знаю напрямую, но я думаю, что вы правы - вам нужно открыть его только один раз в начале вашего приложения.

Глядя на sqlitepersistentobjects , фреймворк ORM для iOS, он только открывает DB при первом его использовании и никогда не закрывает его, кроме случаев, когда возникает проблема с его открытием:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...