не вариант?
Думаю, да
Кажется, я понял, почему у меня нет проблем с форматтером. У меня нет async/await, всё на евентлупах, а это означает, что всё на одном потоке крутится, кроме буквально нескольких явно прописанных вызовов на тредпуле.
Хотя нет, не на одном — таки на двух. Надо дать нагрузку и посмотреть.
После раздумий остановился на этом варианте. Получается вот такое: Было: extension DateFormatter { static let iso8601ShortUTC: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" formatter.calendar = Calendar(identifier: .iso8601) formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.locale = Locale(identifier: "en_US_POSIX") return formatter }() } Стало: extension DateFormatter { private static var _dateFormatterStore: [Thread : DateFormatter] = [:] private static let _lock = NSLock() static let iso8601ShortUTC: DateFormatter = { if let oldFormatter = _dateFormatterStore[Thread.current] { return oldFormatter } else { let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" formatter.calendar = Calendar(identifier: .iso8601) formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.locale = Locale(identifier: "en_US_POSIX") _lock.lock() _dateFormatterStore[Thread.current] = formatter _lock.unlock() return formatter } }() } Спасибо за идею!
Обсуждают сегодня