У меня есть приложение для навигации и отслеживания местоположения.Пока пользователь отслеживает свою поездку, координаты, скорость, временная метка (и некоторые другие) записываются в журнал с каждой входящей координатой. Я не хочу сохранять это в памяти, поскольку это приведет к увеличению памяти приложения при перемещении пользователя.вместе, в конечном итоге, приводит к didReceiveMemoryWarning
и даже к падению приложения.(По крайней мере, до сих пор это был мой опыт) * 1002 *
Какой самый эффективный способ сделать это?Думая о потреблении батареи, использовании процессора, а также об использовании памяти, если это входит в игру.
Я могу придумать два варианта сделать это:
- Войти в файл (что я сейчас делаю, используя этот код):
let newLine: String = "bla bla bla"
let url: URL = URL(string: "someLocalPath")
newLine.appendToURL(url)
extension String {
func appendToURL(_ fileURL: URL) throws {
let data = self.data(using: String.Encoding.utf8)!
try data.appendToURL(fileURL)
}
}
extension Data {
func appendToURL(_ fileURL: URL) throws {
if let fileHandle = try? FileHandle(forWritingTo: fileURL) {
defer {
fileHandle.closeFile()
}
fileHandle.seekToEndOfFile()
fileHandle.write(self)
fileHandle.closeFile()
}
else {
try write(to: fileURL, options: .atomic)
}
}
}
Использование базовых данных
Я еще не пробовал, но я считаю, что это будет относительно легко.Просто создайте сущность со всеми необходимыми полями, а затем добавьте managedObject
для каждой полученной координаты.
Итак, чтобы повторить мой вопрос: какой из этих двух вариантов будет более эффективнымс точки зрения батареи, процессора и памяти?
Дополнительный вопрос: возможно, есть другой способ сделать это.Тот, о котором я не думал?