Flipboard / Flipboard/NSUserDefaultsSimulatorPerformanceBoost

dispatch_barrier_async can lead to inconsistent values when using mutable objects

Abierto
#2 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Objective-C
Estrellas
40
Forks
1
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

dispatch_barrier_async works great for this project, except for the following situation:
1. NSMutableDictionary *registeredDefaults = [[NSMutableDictionary alloc] init];
2. [[NSUserDefaults standardUserDefaults] registerDefaults:registeredDefaults];
3. [registeredDefaults setObject:@"FOO" forKey:@"BAR"];
4. NSObject *value = [[NSUserDefaults standardUserDefaults] objectForKey:@"BAR"];
- With sim performance ON, value may be equal to nil or equal to @"FOO" depending on if line 3 executed before the internal barrier_async block executed.
- With sim performance OFF, value is always equal to nil. Mutations after line 2 are not acknowledged.

The code above is incorrect anyways (you wouldn't expect it to work) -- but we still need to honor the behavior of NSUserDefaults. You could emulate this bug using -setObject:forKey: with a mutable object.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.