最近Objective-Cとそれに書かれているさまざまなライブラリを操作しているときに、2つの非常に人気のあるシングルトンパターンに気づきました。1つのバージョンはシングルトンインスタンスをフェッチしてそのインスタンスメソッドを呼び出し、他のバージョンはクラスメソッドのみを公開し、操作するインスタンスを提供しません。すべて、単一のリソース(StoreKit、CoreData、Parse APIなど)へのアクセスを抽象化することを目的としています。たとえば、MKStoreKitで使用されている以前のアプローチは次のとおりです。
// initialize singleton during app boot
[MKStoreManager sharedManager]
// sometime later in the app
[[MKStoreManager sharedManager] buyFeature:kFeatureAId
onComplete:^(NSString* purchasedFeature)
{
NSLog(@"Purchased: %@", purchasedFeature);
}
onCancelled:^
{
NSLog(@"User Cancelled Transaction");
}];
または、NSUserDefaults、UIApplicationなど。他のアプローチは、MagicalRecordまたはここでParseAPIを使用して確認できます。
// configure API credentials sometime during app boot
[Parse setApplicationId:@"123456"
clientKey:@"123456"];
// sometime later
PFObject *testObject = [PFObject objectWithClassName:@"TestObject"];
[testObject setObject:@"bar" forKey:@"foo"];
[testObject save];
2つのアプローチの長所と短所は何ですか?それらの1つは他よりも根本的に優れていますか?
共有インスタンスを取得する必要がないため、画面のスペースを節約できます(パフォーマンスの違いは関係ない可能性があります)が、テスト容易性など、他の方法で自分自身を台無しにしていますか?
ありがとう!