@@ -53,6 +53,8 @@ public class DVCClient {
5353 private var variableInstanceDictonary = [ String : NSMapTable < AnyObject , AnyObject > ] ( )
5454 private var isConfigCached : Bool = false
5555
56+ private var variableQueue = DispatchQueue ( label: " com.devcycle.VariableQueue " )
57+
5658 /**
5759 Method to initialize the Client object after building
5860 */
@@ -266,34 +268,35 @@ public class DVCClient {
266268 )
267269 }
268270
269- var variable : DVCVariable < T >
270- if ( self . variableInstanceDictonary [ key] == nil ) {
271- self . variableInstanceDictonary [ key] = NSMapTable < AnyObject , AnyObject > ( valueOptions: . weakMemory)
272- }
273-
274- if let variableFromDictonary = self . variableInstanceDictonary [ key] ? . object ( forKey: defaultValue as AnyObject ) as? DVCVariable < T > {
275- variable = variableFromDictonary
276- } else {
277- if let config = self . config? . userConfig,
278- let variableFromApi = config. variables [ key] {
279- variable = DVCVariable ( from: variableFromApi, defaultValue: defaultValue)
271+ return variableQueue. sync {
272+ var variable : DVCVariable < T >
273+ if ( self . variableInstanceDictonary [ key] == nil ) {
274+ self . variableInstanceDictonary [ key] = NSMapTable < AnyObject , AnyObject > ( valueOptions: . weakMemory)
275+ }
276+ if let variableFromDictionary = self . variableInstanceDictonary [ key] ? . object ( forKey: defaultValue as AnyObject ) as? DVCVariable < T > {
277+ variable = variableFromDictionary
280278 } else {
281- variable = DVCVariable (
282- key: key,
283- type: String ( describing: T . self) ,
284- value: nil ,
285- defaultValue: defaultValue,
286- evalReason: nil
287- )
279+ if let config = self . config? . userConfig,
280+ let variableFromApi = config. variables [ key] {
281+ variable = DVCVariable ( from: variableFromApi, defaultValue: defaultValue)
282+ } else {
283+ variable = DVCVariable (
284+ key: key,
285+ type: String ( describing: T . self) ,
286+ value: nil ,
287+ defaultValue: defaultValue,
288+ evalReason: nil
289+ )
290+ }
291+ self . variableInstanceDictonary [ key] ? . setObject ( variable, forKey: defaultValue as AnyObject )
288292 }
289- self . variableInstanceDictonary [ key] ? . setObject ( variable, forKey: defaultValue as AnyObject )
290- }
291-
292- if ( !self . closed) {
293- self . eventQueue. updateAggregateEvents ( variableKey: variable. key, variableIsDefaulted: variable. isDefaulted)
293+
294+ if ( !self . closed) {
295+ self . eventQueue. updateAggregateEvents ( variableKey: variable. key, variableIsDefaulted: variable. isDefaulted)
296+ }
297+
298+ return variable
294299 }
295-
296- return variable
297300 }
298301
299302 public func identifyUser( user: DVCUser , callback: IdentifyCompletedHandler ? = nil ) throws {
0 commit comments