雖然最近使用Objective-C和其中編寫的各種庫,但我注意到了兩種非常流行的單例模式。一個版本獲取單例實例並調用它的實例方法,而其他版本只暴露類方法,並且從不給你一個實例來處理。所有的目的都是抽象化訪問單個資源(StoreKit,CoreData,Parse API等)。例如,這裏是在MKStoreKit採用前一種方法:單例實例vs類方法
// 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或在這裏與解析API:
// 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];
有哪些這兩種方法的優缺點是什麼,其中一個比另一個更好?
無需檢索共享實例可以節省一些屏幕屬性(性能差異可能不相關),但是我是否以其他方式搞砸了自己,例如,可測試性?
謝謝!
很好的答案,謝謝! –
很好的答案,但一個小例子將使它更容易理解。 – atulkhatri