虽然最近使用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