メインのアプリデリゲートがありますストーリーボードによって駆動されるUIViewController派生インスタンスがいくつかあります
アプリケーションに一元化された永続性レイヤーを提供したいとします。おそらくSQLiteのコアデータです。それらのオブジェクトはどこに置きますか?すべてのUIViewControllerインスタンスからアクセスできる一元的にアクセス可能な「アプリケーション」クラスがありません。
ここで従うべきパターンはありますか?
メインのアプリデリゲートがありますストーリーボードによって駆動されるUIViewController派生インスタンスがいくつかあります
アプリケーションに一元化された永続性レイヤーを提供したいとします。おそらくSQLiteのコアデータです。それらのオブジェクトはどこに置きますか?すべてのUIViewControllerインスタンスからアクセスできる一元的にアクセス可能な「アプリケーション」クラスがありません。
ここで従うべきパターンはありますか?
シングルトンパターンを確認する必要があります:
ソフトウェアエンジニアリングでは、シングルトンパターンは、クラスのインスタンス化を1つのオブジェクトに制限するデザインパターンです。これは、システム全体でアクションを調整するために1つのオブジェクトが必要な場合に役立ちます。この概念は、オブジェクトが1つしかない場合に効率的に動作するシステム、またはインスタンス化を特定の数のオブジェクトに制限するシステムに一般化されることがあります。この用語は、シングルトンの数学的概念に由来します。
実装例のソースは次のとおりです。Objective-Cシングルトンはどのように見えるべきですか?
そしてここに最新のソリューションへの直接リンクがあります: https ://stackoverflow.com/a/145395/644629
あなたが説明しているのはあなたのモデルレイヤーです。モデルを管理する主な方法は2つあります。
どちらの場合も、「メインモデルオブジェクト」は通常、ある種のオブジェクトマネージャです。ドキュメントのPersonManager
場合もあれば、オブジェクトがたくさんある場合の場合もありPerson
ます。このオブジェクトは、永続ストア(通常はCore Data)からモデルオブジェクトを販売します。
ここでのシングルトンの利点は、実装が少し簡単で、マネージャーを回す必要がないことです。非シングルトンの利点は、(ドキュメントベースのシステムの場合)複数のシステムを使用する方が簡単であり、シングルトンよりも非シングルトンについてテストおよび推論するのが簡単なことです。そうは言っても、おそらく私のプロジェクトの80%はシングルトンモデルマネージャーを使用しています。
ちなみに、あなたはすでに理解しているように見えます。モデルをアプリケーションデリゲートに格納したり、アプリケーションデリゲートをモデルに到達するための「ランデブーポイント」として使用したりしないでください。つまりsharedModel
、アプリケーションデリゲートにメソッドを設定しないでください。[[UIApplication sharedApplication] delegate]
コードのどこかで電話をかけていることに気付いた場合、ほとんどの場合、何か間違ったことをしていることになります。アプリケーションデリゲートにデータをぶら下げると、コードの再利用が非常に困難になります。
アプリケーションの存続期間の範囲を持つシングルトンパターンを使用します。
@interface DataManager ()
@end
#pragma mark -
@implementation DataManager
#pragma mark - Shared Instance
static DataManager* sharedInstance = nil;
#pragma mark - Singleton Methods
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
+ (DataManager*)sharedInstance
{
@synchronized([DataManager class])
{
if (!sharedInstance) {
//[[self alloc] init];
sharedInstance = [[DataManager alloc] init];
}
return sharedInstance;
}
return nil;
}
+ (id)alloc
{
@synchronized([DataManager class])
{
NSAssert(sharedInstance == nil, @"Attempted to allocate a second instance \
of a singleton.");
sharedInstance = [super alloc];
return sharedInstance;
}
return nil;
}
@end
プロパティを.hファイルで宣言し、ここで.mファイルに合成します。
そのプロパティを使用するには、次を呼び出します。
// set value
[[DataManager sharedInstance] setSharedProperty:@"ABC"]; // If its a string
// get Value
NSLog(@"value : %@", [[DataManager sharedInstance] sharedProperty]);
これがあなたが必要としたものであることを願っています。
コーディングをお楽しみください:)