虽然最近与Objective-C和写在它的各种库的工作,我已经注意到2种非常受欢迎的单模式。 一个版本获取单个实例,并调用它的实例方法和其他版本只公开类的方法,从不给你一个实例一起工作。 所有具有抽象访问单个资源(StoreKit,CoreData,解析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:
// 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];
什么是两种方法的优点和缺点,是他们中的一个从根本上优于其他?
不必检索共享实例节省一些屏幕房地产(性能差异可能是无关紧要的),但我在自己拧在一些其他的方式,例如,可测试性,是否明智?
谢谢!