Frage

Ich lese, dass NSArray ist nur so eine Sache. Klingt schwer. Ich habe 7 wirklich dicke Bücher hier auf meinem Schreibtisch über Objective-C, Cocoa und C Keiner von ihnen überhaupt Klasse Cluster erwähnen, zumindest kann ich es nicht auf der Rückseite der Bücher im Index finden. Also, was ist das?

War es hilfreich?

Lösung

Von Apple docs ... . Kurz gesagt, es ist ein Design-Muster in der Stiftung Rahmen verwendet, die wahrscheinlich ist, warum es nicht in ObjC Büchern erwähnt.

  

Ein Klasse-Cluster ist eine Architektur, die Gruppen eine Reihe von privaten, konkreten Subklassen im Rahmen eines öffentlichen, abstrakter Superklasse. Die Gruppierung von Klassen auf diese Weise eine vereinfachte Schnittstelle für den Benutzer, der die öffentlich sichtbare Architektur sieht nur.

Andere Tipps

Ich weiß nicht, was in der CDP ist, dass Steve verwies aber im Grunde der Objective-C-Klasse-Cluster ist ein Konstrukt, das die abstrakten Werk Muster.

Die Idee ist einfach : Sie wollen eine Fabrik (Cluster) Schnittstelle schaffen, die mit einer minimalen Beschreibung, produziert und liefert eine bestimmte konkrete Instanz eines Factory-Objekt, das das Verhalten der Cluster-Familie erfüllt von der Fabrik (Cluster) Schnittstelle beschrieben.

Ein einfaches konkretes Beispiel : Dieses Beispiel stellt eine Laugh Factory, die konkreten Klassen spezifischer Lachen Typen produziert (z Guffaw, Giggle). Achten Sie auf die Laugh initWithLaughter:. Methode

In Laugh.h:

#define kLaughWithGuffaw  1
#define kLaughWithGiggle  2

@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end

In Laugh.m:

@interface Guffaws:Laugh {}
- (void) laugh;
@end

@interface Giggles:Laugh {}
- (void) laugh;
@end

@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
    id instanceReturn=nil;
    ; // Removed for ARC [self release]
    if ( laughterType == kLaughWithGuffaw )
        instanceReturn = [[Guffaws alloc]init];
    else if( laughterType == kLaughWithGiggle )
        instanceReturn = [[Giggles alloc]init];
    else
        ; // deal with this
    return instanceReturn;
}

- (void) laugh {
    NSLog(@"Humbug");
}
@end

@implementation Guffaws
    - (void) laugh {
        NSLog(@"OH HA HA HOWAH HA HA HA");
    }
@end

@implementation Giggles
    - (void) laugh {
        NSLog(@"Tee hee");
    }
@end

Von der Programmierung in Objective-C von Stephen Kochan auf Seite 498 im Glossar, Cluster:

  

Eine abstrakte Klasse, die Gruppen eine Reihe von   Private konkrete Subklassen, die Bereitstellung   eine vereinfachte Schnittstelle zum Benutzer   durch die abstrakte Klasse.

Klasse Cluster bietet eine einzige öffentliche Schnittstelle zu einer Gruppe von Beton, Privatunterklasse-Implementierungen. Ein Objective-C-Programmierer nutzt Klasse Cluster oft und es selten realisiert - und das ist der springende Punkt bei einem Klasse-Cluster. Die Aufgabe eines Klasse-Cluster ist es, die Komplexität der Implementierung Detail hinter einer öffentlichen Schnittstelle zu verstecken.

Viele der Foundation-Klassen sind Klasse-Cluster, wie NSString, NSArray, NSDictionary und NSNumber. Wenn Sie [NSString stringWithFormat:] die Klasse Cluster nennen, ist Sie einige konkrete Klasse geben, die die NSString-Schnittstelle implementiert. Es könnte eine NSConcreteString, NSCFString, NSFooBarString sein usw., die die Cluster-Klasse gibt Ihnen auf den Konstruktor oder initializer basiert Sie anrufen und die Argumente.

Aufgrund dieser Klasse Cluster sind eine der Bevollmächtigung Konzepte in Objective-C-Programmierung.

  • Sehr einfach zu implementieren
  • Einfach, um die zugrunde liegende Implementierung ändern Sie den Code ohne Änderung, die es nennt.
  • Einfache verschiedene konkrete Implementierungen zur Laufzeit (das heißt Testressourcen oder Mock-Objekte)
  • zur Verfügung zu stellen
  • Aufgrund der oben, leicht zu testen und Refactoring

Wenn Sie aus anderen Sprachen kommen können Sie mit der Gang of Four Muster vertraut sein. Klasse Cluster haben Elemente sowohl die abstrakte Fabrik und die Fassadenmuster.

Apples öffentliche Dokumentation deckt Klasse Cluster (und wie sie umzusetzen und zu erweitern) recht ausführlich. Leider habe ich festgestellt, dass für viele iOS-Entwickler diese und andere Cocoa-spezifische Muster ein blinder Fleck sind.

Cocoa Kernkompetenzen: Klasse Cluster

Cocoa Fundamentals Guide: Klasse Cluster

Beispiele, wie Sie Ihre eigene Klasse Cluster sind auf GitHub verfügbar implementieren

Der Cluster NSArray Klasse ist nicht „Schwergewicht“, es ist eine Art und Weise für eine beliebige Anzahl von Implementierungen eines Arrays Klasse ist, ohne den Code zu kennen oder die Sorge um die spezielle Implementierung verwendet werden. Unter der Haube gibt es konkrete Subklassen von NSArray, die, wie großen, spärlich Arrays auf verschiedene Anwendungsfälle geeignet sind, oder Arrays, die eine bestimmte Anzahl von Elementen enthält, die zum Zeitpunkt der Kompilierung bekannt sind.

NSArray, NSString und NSNumber sind die Klasse-Cluster werden Sie am häufigsten begegnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top