2 Stimmen

SQLite-Persistenz während des gesamten Lebenszyklus einer App unter iOS

Ich habe gelesen, bis auf SQLite3 in der iOS-Firmware, die meine Bedürfnisse für die App i'm writiung dienen könnte.

Was ich nicht herausfinden kann, ist, ob sie dauerhaft ist oder verschwindet, wie es bei manchen Objekten der Fall ist.

Wenn ich zum Beispiel sqlite3_open() die eine C-Funktion statt ein Objective-C-Objekt zu sein scheint, wenn ich dies am Anfang meiner Anwendung öffnen, bleibt es persistent, bis ich es schließe, egal wie viele Ansichten ich Push/Pop alle über den Platz.

Natürlich würde das davon abhängen, wo ich es einsetze, aber wenn ich eine universelle App machen würde und einige zentrale Funktionen zum Laden/Speichern von Daten hätte, die sowohl für das iPhone als auch für das iPad gelten würden, wenn ich in meinem didFinishLoading : Ich setzte einen Aufruf zum Öffnen der SQLite-Datenbank und rief dann verschiedene exec's von Abfragen, würde es während des Lebenszyklus der Anwendung persistent bleiben.

o

Bin ich besser aus Öffnen und Schließen nach Bedarf, ich komme aus einem PHP-Hintergrund, so dass ich normalerweise eine Datenbank zu Beginn des Skripts öffnen und dann viele Abfragen ausführen und dann schließlich schließen Sie es vor Browser-Ausgabe.

Nach dem 1.000.000sten, was ich in den letzten Monaten über iOS-Programmierung gelernt habe, denke ich, dass letzteres der bessere Weg ist, da die Möglichkeit besteht, dass die App vorzeitig beendet wird oder in den Hintergrund geht.

Ich hätte nur gerne eine zweite Meinung zu meinen Überlegungen.

0voto

Chris Kimpton Punkte 5438

Ich weiß es nicht direkt, aber ich denke, Sie haben Recht - Sie müssen es nur einmal beim Start Ihrer Anwendung öffnen.

Blick auf sqlitepersistentobjects ein ORM-Framework für iOS, ist es nur öffnet die DB wenn er zum ersten Mal benutzt wird, und schließt ihn nie, außer wenn es ein Problem beim Öffnen gibt :)

0voto

Mirek Rusin Punkte 17854

Eine einzelne geöffnete Sqlite-Datenbank, die in der gesamten Anwendung von verschiedenen Stellen aus verwendet wird, ist in Ordnung.

Sie verwenden das Wort "persistent", was verwirrend ist. Was Sie meinen, ist "Wiederverwendung einer einzigen Verbindung für die Ausführung verschiedener Anweisungen in der Anwendung, möglicherweise von verschiedenen Threads aus". Persistenz hat im Zusammenhang mit Datenbanken eine völlig andere Bedeutung - es bedeutet, dass die angeforderte Änderung der Daten sicher auf einem Medium (Festplatte, Flash-Laufwerk) gespeichert wurde und das Gerät sogar unerwartet heruntergefahren werden kann, ohne dass die geschriebenen Daten beeinträchtigt werden.

Es wird empfohlen, die Sqlite-Anweisungen von einem einzigen, dedizierten Thread aus auszuführen.

Es ist nicht empfehlenswert, sich von verschiedenen Prozessen aus mit der Sqlite-Datenbank zu verbinden, um parallele Änderungen durchzuführen.

Eine gute alternative Lösung ist die Verwendung der asynchronen Sqlite-Erweiterung, die alle Schreibvorgänge an einen dedizierten Hintergrund-Thread sendet.

Sie können sich informieren über https://github.com/mirek/CoreSQLite3 Framework, wenn Sie eine benutzerdefinierte (neuere Version) von Sqlite verwenden möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X