@@ -374,17 +374,20 @@ - (void)setUniversalLinkUrl:(NSString *)universalLinkUrl {
374374}
375375
376376- (NSString *)sessionParams {
377- if (_sessionParams) {
378- _sessionParams = [self readStringFromDefaults: BRANCH_PREFS_KEY_SESSION_PARAMS];
377+ @synchronized (self) {
378+ if (!_sessionParams) {
379+ _sessionParams = [self readStringFromDefaults: BRANCH_PREFS_KEY_SESSION_PARAMS];
380+ }
381+ return _sessionParams;
379382 }
380-
381- return _sessionParams;
382383}
383384
384385- (void )setSessionParams : (NSString *)sessionParams {
385- if (![_sessionParams isEqualToString: sessionParams]) {
386- _sessionParams = sessionParams;
387- [self writeObjectToDefaults: BRANCH_PREFS_KEY_SESSION_PARAMS value: sessionParams];
386+ @synchronized (self) {
387+ if (![_sessionParams isEqualToString: sessionParams]) {
388+ _sessionParams = sessionParams;
389+ [self writeObjectToDefaults: BRANCH_PREFS_KEY_SESSION_PARAMS value: sessionParams];
390+ }
388391 }
389392}
390393
@@ -479,22 +482,28 @@ - (void)setRequestMetadataKey:(NSString *)key value:(NSObject *)value {
479482}
480483
481484- (NSMutableDictionary *)instrumentationDictionary {
482- if (!_instrumentationDictionary) {
483- _instrumentationDictionary = [NSMutableDictionary dictionary ];
485+ @synchronized (self) {
486+ if (!_instrumentationDictionary) {
487+ _instrumentationDictionary = [NSMutableDictionary dictionary ];
488+ }
489+ return _instrumentationDictionary;
484490 }
485- return _instrumentationDictionary;
486491}
487492
488493- (void )addInstrumentationDictionaryKey : (NSString *)key value : (NSString *)value {
489- if (key && value) {
490- [self .instrumentationDictionary setObject: value forKey: key];
494+ @synchronized (self) {
495+ if (key && value) {
496+ [self .instrumentationDictionary setObject: value forKey: key];
497+ }
491498 }
492499}
493500
494501- (void )clearInstrumentationDictionary {
495- NSArray *keys = [_instrumentationDictionary allKeys ];
496- for (int i = 0 ; i < [keys count ]; i++) {
497- [_instrumentationDictionary removeObjectForKey: keys[i]];
502+ @synchronized (self) {
503+ NSArray *keys = [_instrumentationDictionary allKeys ];
504+ for (int i = 0 ; i < [keys count ]; i++) {
505+ [_instrumentationDictionary removeObjectForKey: keys[i]];
506+ }
498507 }
499508}
500509
@@ -606,42 +615,48 @@ - (NSDictionary *)getContentAnalyticsManifest {
606615 return (NSDictionary *)[self readObjectFromDefaults: BRANCH_PREFS_KEY_ANALYTICS_MANIFEST];
607616}
608617
618+
609619#pragma mark - Writing To Persistence
610620
621+
611622- (void )writeIntegerToDefaults : (NSString *)key value : (NSInteger )value {
612- self.persistenceDict [key] = @(value);
613- [self persistPrefsToDisk ];
623+ [self writeObjectToDefaults: key value: @(value)];
614624}
615625
616626- (void )writeBoolToDefaults : (NSString *)key value : (BOOL )value {
617- self.persistenceDict [key] = @(value);
618- [self persistPrefsToDisk ];
627+ [self writeObjectToDefaults: key value: @(value)];
619628}
620629
621630- (void )writeObjectToDefaults : (NSString *)key value : (NSObject *)value {
622- if (value) {
623- self.persistenceDict [key] = value;
624- }
625- else {
626- [self .persistenceDict removeObjectForKey: key];
631+ @synchronized (self) {
632+ if (value) {
633+ self.persistenceDict [key] = value;
634+ }
635+ else {
636+ [self .persistenceDict removeObjectForKey: key];
637+ }
638+ [self persistPrefsToDisk ];
627639 }
628-
629- [self persistPrefsToDisk ];
630640}
631641
632642- (void )persistPrefsToDisk {
633643 @synchronized (self) {
634- NSDictionary *persistenceDict = [self .persistenceDict copy ];
644+ if (!self.persistenceDict ) return ;
645+ NSData *data = nil ;
646+ @try {
647+ data = [NSKeyedArchiver archivedDataWithRootObject: self .persistenceDict];
648+ }
649+ @catch (id exception) {
650+ data = nil ;
651+ [self logWarning:
652+ [NSString stringWithFormat: @" Exception creating preferences data: %@ ." ,
653+ exception]];
654+ }
655+ if (!data) {
656+ [self logWarning: @" Can't create preferences data." ];
657+ return ;
658+ }
635659 NSBlockOperation *newPersistOp = [NSBlockOperation blockOperationWithBlock: ^ {
636- NSData *data = nil ;
637- @try {
638- data = [NSKeyedArchiver archivedDataWithRootObject: persistenceDict];
639- } @catch (id n) {
640- }
641- if (!data) {
642- [self logWarning: @" Can't create preferences archive." ];
643- return ;
644- }
645660 NSError *error = nil ;
646661 [data writeToURL: self .class.URLForPrefsFile
647662 options: NSDataWritingAtomic error: &error];
@@ -651,7 +666,7 @@ - (void)persistPrefsToDisk {
651666 @" Failed to persist preferences to disk: %@ ." , error]];
652667 }
653668 }];
654- [self .persistPrefsQueue addOperation: newPersistOp];
669+ [self .persistPrefsQueue addOperation: newPersistOp];
655670 }
656671}
657672
0 commit comments