From 44bb39af1fdb32b49dda00c8f27994aa4d309db6 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Wed, 6 Nov 2024 15:31:33 -0500 Subject: [PATCH] [Config] Prefer NSLock over objc_sync_enter for synchronizing value types --- .../SwiftNew/UserDefaultsManager.swift | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/FirebaseRemoteConfig/SwiftNew/UserDefaultsManager.swift b/FirebaseRemoteConfig/SwiftNew/UserDefaultsManager.swift index 2cdab034051..f6b1d2e5030 100644 --- a/FirebaseRemoteConfig/SwiftNew/UserDefaultsManager.swift +++ b/FirebaseRemoteConfig/SwiftNew/UserDefaultsManager.swift @@ -73,6 +73,7 @@ public class UserDefaultsManager: NSObject { } } + private static let sharedInstanceMapLock = NSLock() private static var sharedInstanceMap: [String: UserDefaults] = [:] /// Returns the shared user defaults instance for the given bundle identifier. @@ -81,14 +82,14 @@ public class UserDefaultsManager: NSObject { /// - Returns: The shared user defaults instance. @objc(sharedUserDefaultsForBundleIdentifier:) static func sharedUserDefaultsForBundleIdentifier(_ bundleIdentifier: String) -> UserDefaults { - objc_sync_enter(sharedInstanceMap) - defer { objc_sync_exit(sharedInstanceMap) } - if let instance = sharedInstanceMap[bundleIdentifier] { - return instance + sharedInstanceMapLock.withLock { + if let instance = sharedInstanceMap[bundleIdentifier] { + return instance + } + let userDefaults = UserDefaults(suiteName: userDefaultsSuiteName(for: bundleIdentifier))! + sharedInstanceMap[bundleIdentifier] = userDefaults + return userDefaults } - let userDefaults = UserDefaults(suiteName: userDefaultsSuiteName(for: bundleIdentifier))! - sharedInstanceMap[bundleIdentifier] = userDefaults - return userDefaults } /// Returns the user defaults suite name for the given bundle identifier.