Я занимаюсь разработкой приложения для iOS, используя swift 4.0 (та же проблема возникает и в 4.2).
Я добавил расширение для Encodable
extension Encodable{
func toDict() throws -> [String:Any]? {
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(self)
do{
return try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any]
}
catch{
return nil
}
}
}
У меня есть экземпляр класса Encodable и класса со свойствами, которые также относятся к классу Encodable, и заметил, что при частом вызове instance.toDict()
память, используемая моим приложением, значительно увеличивается.
Это верно, даже если я не использую возвращаемый результат, это также верно, если я возвращаю ноль и игнорирую результат JSONSerialization.jsonObject
.
Я уверен, что именно эта строка вызывает проблему (игнорирование результата и возврат nil по-прежнему вызывает проблему, а комментирование этой строки и возврат nil остановят увеличение памяти.
Память увеличивается все больше и больше с течением времени, и toDict()
вызывается больше, в конечном итоге я использую 400 МБ менее чем за 10 минут.
Кто-нибудь сталкивался с этой проблемой? и есть ли решение?