私は、iPhoneベースのデータを永続化する方法が私のiPhoneアプリで正しい方法であるかどうかを判断しようとしています。iphone data persistence健全性チェック
私はまだCore Dataの複雑さを熟知していないので、FMDBラッパーでSqliteを使用しています。
私はtheElementsサンプルに似たシングルトンを使用するクラスを持っています。ここでは
は、私は今それをやっている方法です。静的共有インスタンスが作成され、2つ以上のビューで共有されます。データがダウンロードされ、このクラスの配列にロードされます。私はSqliteにダウンロードを保存します。私は初期化時にSqliteのデータをロードし、タイムスタンプごとにWebから更新を取得します。
私はこれを「正しい」方法ですか?これは適切に見えますか?
ここでは、簡潔にするために重度にカットされた擬似コードを示します。
@implementation theClass
static theClass *sharedInstance = nil;
...
- (void)requestDone:(Request *)request
{
NSDictionary *results=[[request responseString] JSONValue];
[self._array removeAllObjects];
[self._array addObjectsFromArray:results];
[self updateDatabase]; //stores any new results
[[NSUserDefaults standardUserDefaults] setObject:self.lastUpdated forKey:@"LastAccessed"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self didFinish];
}
-(void)setupArray {
self._array=[NSMutableArray array];
...
}
...
-(void)getUpdates {
NSURL *jsonURL = [NSURL URLWithString:@"URL TO THE WEBDATA"];
request = NSURLRequst....
}
- init {
if (self = [super init]) {
[self setupArray];
}
return self;
}
+ (theClass *)shared {
@synchronized(self) {
if (sharedInstance == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance; // assignment and return on first allocation
}
}
return nil; //on subsequent allocation attempts return nil
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
- (id)retain {
return self;
}
- (unsigned)retainCount {
return UINT_MAX;}
- (void)release {
//do nothing
}
- (id)autorelease {
return self;
}
http://cocoawithlove.googlepages.com/SynthesizeSingleton.h.zipこのマクロを使用すると、クラスを自分でコーディングする代わりにシングルトンにすることができます。 +(ClassName *)sharedClassNameを追加するだけです。 (ClassNameを置き換えてください)、そしてインプリメンテーションではsynthesizesingleton.hファイルをインポートし、SYNTHESIZE_SINGLETON_FOR_CLASS(ClassName);を実行します。これを行う利点は、シングルトンクラスが複数ある場合は、コードが重複しないことです。 – mk12
素晴らしいチップ。ありがとう! 上記はデータと永続ストレージに適した方法だと思いますか? –