Während ich kürzlich mit Objective-C und verschiedenen darin geschriebenen Bibliotheken gearbeitet habe, habe ich zwei wirklich populäre Singleton-Muster bemerkt. Eine Version ruft die Singleton-Instanz ab und ruft ihre Instanzmethoden auf. Eine andere Version macht nur Klassenmethoden verfügbar und gibt Ihnen nie eine Instanz, mit der Sie arbeiten können. Alle haben den Zweck, den Zugriff auf eine einzelne Ressource (StoreKit, CoreData, Parse API usw.) zu abstrahieren. Zum Beispiel ist hier der erste Ansatz in MKStoreKit verwendet:Singleton-Instanz vs Klassenmethoden
// 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");
}];
oder alternativ NSUserDefaults, UIApplication etc .. Der andere Ansatz in MagicalRecord gesehen werden kann oder hier mit 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];
Was sind einige Vor- und Nachteile der beiden Ansätze und ist einer von ihnen grundsätzlich besser als der andere?
Wenn Sie die gemeinsam genutzte Instanz nicht abrufen müssen, sparen Sie einige Bildschirmfehler (der Leistungsunterschied ist wahrscheinlich irrelevant), aber schraube ich mich auf andere Weise ein, zum Beispiel testbar?
Danke!
Große Antwort, danke! –
Schöne Antwort, aber ein kleines Beispiel macht es viel einfacher zu verstehen. – atulkhatri