Question

Je lisais que NSArray est juste une telle chose. Cela semble lourd. J'ai 7 vraiment de gros livres ici sur mon bureau au sujet Objective-C, Cocoa et C. Aucun d'entre eux mentionnent Cluster classe du tout, au moins je ne trouve pas dans l'index à l'arrière des livres. Alors qu'est-ce que?

Était-ce utile?

La solution

docs A partir d'Apple ... . En bref, il est un modèle de conception utilisé dans le cadre Fondation, ce qui est probablement la raison pour laquelle il n'est pas mentionné dans les livres ObjC.

  

Un cluster de classe est une architecture qui regroupe un certain nombre de particuliers, les sous-classes concrètes dans le cadre d'un public, résumé superclasse. Le regroupement des classes de cette manière fournit une interface simplifiée pour l'utilisateur, qui ne voit que l'architecture visible publiquement.

Autres conseils

Je ne sais pas ce qui est dans le CDP que Steve référencé mais, fondamentalement, la Classe Objective-C Cluster est une construction qui prend en charge la mise en œuvre abstraite le modèle de l'usine.

idée est simple : Vous voulez fournir une interface usine (Cluster) qui, avec une description minimale, fabrique et renvoie une instance concrète spécifique d'un objet usine qui satisfait le comportement de la famille de cluster décrit par l'interface usine (Cluster).

Un simple exemple concret : Cet exemple fournit une usine de rire qui produit des classes concrètes de types de rire spécifiques (par exemple ricanement, Giggle). Faites attention à la Rire initWithLaughter:. méthode

En Laugh.h:

#define kLaughWithGuffaw  1
#define kLaughWithGiggle  2

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

En 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

De la programmation en c objective par Stephen Kochan à la page 498 dans le glossaire, cluster:

  

Une classe abstraite qui regroupe un ensemble de   sous-classes concrètes privées, fournissant   une interface simplifiée pour l'utilisateur   par la classe abstraite.

grappes de classe fournissent une seule interface publique à un groupe de béton, les implémentations de sous-classe privée. Un programmeur Objective-C utilise des clusters de classe souvent et réalise rarement - et c'est le point de l'ensemble d'un groupe de classe. Le travail d'un groupe de classe est de cacher la complexité des détails de mise en œuvre derrière une interface publique.

Un grand nombre des classes Foundation sont des clusters de classe, comme NSString, NSArray, NSDictionary et NSNumber. Lorsque vous appelez [NSString stringWithFormat:] le cluster de classe est de vous donner une classe concrète qui implémente l'interface NSString. Il pourrait être un NSConcreteString, NSCFString, NSFooBarString, etc. Ce qui le cluster de classe vous donne est basé sur le constructeur ou initialiseur vous appelez et les arguments.

En raison de cela, les clusters de classe sont l'un des concepts les plus Empowering dans la programmation Objective-C.

  • Très facile à mettre en œuvre
  • Facile à changer la mise en œuvre sous-jacente sans changer le code qui l'appelle.
  • Facile à fournir différentes implémentations concrètes à l'exécution (à savoir des ressources de test ou des objets fantaisie)
  • En raison de ce qui précède, facile à tester et factoriser

Si vous venez d'autres langues que vous connaissez peut-être la bande des quatre modèles. clusters de classe ont des éléments à la fois l'usine abstraite et les motifs de façade.

documentation publique d'Apple couvre les clusters de classe (et comment mettre en œuvre et de les étendre) assez largement. Malheureusement, j'ai trouvé que pour de nombreux développeurs iOS et dans d'autres modèles spécifiques à Cocoa sont un point aveugle.

Cocoa Compétences de base: de cluster de classe

Cocoa Fundamentals Guide: Les clusters de classe

Des exemples de la façon de mettre en œuvre vos propres clusters de classe sont disponibles sur GitHub

Le cluster de classe NSArray est pas « poids lourd », il est un moyen pour un certain nombre de mises en œuvre d'une classe de tableau à utiliser sans votre code connaître ou se soucier de la mise en œuvre particulière. Sous le capot, il y a des sous-classes concrètes de NSArray qui sont appropriés à différents cas d'utilisation, tels que de grandes matrices creuses, ou des matrices contenant un certain nombre d'éléments qui sont connus lors de la compilation.

NSArray, NSString et NSNumber sont les clusters de classe vous rencontrez le plus souvent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top