私は、さまざまな要因(ネットワークの到達可能性、近接性など)によって完了できないiphone-to-app-serverトランザクションのエンキューおよびデキューを担当するシングルトン遅延トランザクションマネージャクラスを持っています。到達可能性/近接性が復元されると、トランザクションをデキューしようとします。デキューするのと同時に他のトランザクションをエンキューすることも可能です。
私の理解は、NSUserDefaultsは、正確に私が欲しいものである変更可能な辞書SO linkのスレッドセーフラッパーです。同じSOのリンクは、NSUserDefaultsがユーザーの好みのためのものであることを示しています。NSKeyedArchiverまたはNSUserDefaultsを同期しました
これらの取引はユーザー設定ではありませんが、それは私が必要とする機能です。 ここで、NSMutableDictionaryのトランザクションをNSMutableDictionaryの読み込み/書き込み/同期化することはできますか?またはNSKeyed(Un)アーカイバ(下記参照)で読み書きする独自のロック機構を実装する必要がありますか?
いくつかのコード:
- (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;
}
デキュー:
// @synchronized this block?
NSMutableDictionary * QD = [self readFile];
[QD removeObjectForKey:thing.thingId];
[self writeFile: QD];
// @ sync?
ありがとうございました。私は読み書きロックを使うつもりだと思う。 – Rayfleck