У меня есть одноэлементный класс менеджера отложенных транзакций, который отвечает за постановку в очередь и снятие очереди транзакций iphone-app-server, которые не могут быть выполнены из-за множества факторов (доступность сети, близость и т. Д.). Когда достижимость / близость восстанавливается, он пытается исключить транзакции. Также возможно, что другая транзакция будет поставлена в очередь в то же время, когда происходит снятие очереди.
Насколько я понимаю, NSUserDefaults - это потокобезопасная оболочка изменяемого словаря SO link , и это именно то, что мне нужно. В той же ссылке SO указано, что NSUserDefaults предназначен для пользовательских настроек.
Эти транзакции не являются пользовательскими настройками, но это функциональность, которую я хочу.
Итак, вот вопрос, могу ли я читать / писать / синхронизировать NSMutableDictionary транзакций в NSUserDefaults без повреждения словаря, или мне нужно реализовать свой собственный механизм блокировки с чтением и записью с помощью NSKeyed (Un) Archiver (см. Ниже)?
Код:
- (void) queThing:(Thing *)aThing {
// @synchronized this block?
NSMutableDictionary * QD = [self readFile];
[QD setObject:aThing forKey:aThing.thingId];
[self writeFile: QD];
// @ sync?
}
- (void) writeFile:(NSMutableDictionary *)theData {
BOOL status = [NSKeyedArchiver archiveRootObject: theData toFile:archivePath];
if ( !status) {
DebugLog(@"Write to archive failed.");
} else {
DebugLog(@"Write to archive SUCCEEDED.");
}
}
- (NSMutableDictionary *) readFile {
NSMutableDictionary *Q =[NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
if ( ! Q ) {
Q = [NSMutableDictionary dictionaryWithCapacity:2];
}
return Q;
}
Dequeue:
// @synchronized this block?
NSMutableDictionary * QD = [self readFile];
[QD removeObjectForKey:thing.thingId];
[self writeFile: QD];
// @ sync?