最近在使用Objective-C及其各种库时,我注意到了两种非常流行的单例模式。一种版本获取单例实例并调用其实例方法,另一种版本仅公开类方法,从不提供可操作的实例。它们都旨在抽象化访问单个资源(如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中看到,或者在此处使用Parse API:
或者使用NSUserDefaults、UIApplication等等。另一种方法可以在MagicalRecord中看到,或者在这里使用Parse 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];
这两种方法各有优缺点,它们中的一种是否从根本上更好呢?不需要检索共享实例可以节省一些屏幕空间(性能差异可能不重要),但是我是否在其他方面搞砸了自己,例如在测试方面?
谢谢!