there is still quite a bit of memory (several MB) that is still allocated and not released. I've isolated this memory consumption to JSONDecoder (not Data or other types) in the example above, and as far as I can tell the memory is never released for the remaining lifetime of the app session.
As a related note: If you search the web for "Swift JSON Decoder memory leak" you will find several threads on Stack Overflow, Apple Developer Forums, etc. where this problem is raised and remains unresolved.
Attachment: Download
Environment
macOS 11.3.1 Xcode 12.5 iPhone 12 simulator or iPhone 11 Pro on iOS 14.4.2Additional Detail from JIRA
| | | |------------------|-----------------| |Votes | 0 | |Component/s | Standard Library | |Labels | Bug | |Assignee | None | |Priority | Medium | md5: 5c9b80d9f3cb8dc5b6e9fed91dddde73Issue Description:
I have the attached large JSON file. I have declared this struct to decode an array of from the JSON:
struct Symbol: Codable {
{{ let symbol: String}}
{{ let name: String}}
{{ let type: String}}
{{ let exchange: String}}
}
If I decode as follows:
var symbols = try? JSONDecoder().decode([Symbol].self, from: Data(contentsOf: Bundle.main.url(forResource: "symbols", withExtension: "json")!)
and then later set symbols to nil:
symbols = nil
there is still quite a bit of memory (several MB) that is still allocated and not released. I've isolated this memory consumption to JSONDecoder (not Data or other types) in the example above, and as far as I can tell the memory is never released for the remaining lifetime of the app session.
As a related note: If you search the web for "Swift JSON Decoder memory leak" you will find several threads on Stack Overflow, Apple Developer Forums, etc. where this problem is raised and remains unresolved.