J'ai classe A qui est super classe pour la classe B et la classe C. Je dois stocker les objets de classe A dans NSMutablearray 'statique' défini dans la classe A. Est-il possible de modifier les données stockées dans MSMutableArray en utilisant des méthodes en classe B et classe C? Comment créer et initialiser un tableau statique? Un exemple serait de plus d'aide. Merci d'avance.Comment créer un NSMutableArray statique dans une classe dans Objective c?
7
A
Répondre
14
Voici une façon de le faire.
@interface ClassA : NSObject
{
}
-(NSMutableArray*) myStaticArray;
@end
@implementation ClassA
-(NSMutableArray*) myStaticArray
{
static NSMutableArray* theArray = nil;
if (theArray == nil)
{
theArray = [[NSMutableArray alloc] init];
}
return theArray;
}
@end
C'est un modèle que j'utilise beaucoup au lieu de vrais singletons. Objets de ClassA et ses sous-classes peuvent l'utiliser comme ceci:
[[self myStaticArray] addObject: foo];
Il y a des variations, vous pouvez envisager par exemple vous pouvez faire de la méthode une méthode de classe. Vous pouvez également rendre le thread de la méthode sûr dans un environnement multithread. par exemple.
-(NSMutableArray*) myStaticArray
{
static NSMutableArray* theArray = nil;
@synchronized([ClassA class])
{
if (theArray == nil)
{
theArray = [[NSMutableArray alloc] init];
}
}
return theArray;
}
cela ne causera-t-il pas une fuite de mémoire pour theArray? – tbag
Il ne fuira pas du tout - theArray est défini comme un tableau statique, ainsi il n'instanciera cet objet qu'une seule fois. – deathhorse
@JeremyP vient de trouver ça maintenant. Je voulais juste dire des encouragements pour cela. Excellente solution! –