2011-12-08 26 views
9

uso el siguiente código para crear una matriz estática pública en C#matriz estática en C objetiva

public class A{ 
    public static array[] obj; 
} 

tengo otra clase B. de la clase llamada BI A.ArrayName y me da la matriz que utilizo en clase A.

lo que quería saber, ¿cuál es el equivalente de esto en C objetiva

Respuesta

18

no hay una sintaxis especial para esto. Simplemente define un método de clase para devolver la matriz estática.

Por ejemplo:

@implementation A // note this is in the implementation 

static NSArray *array; 

+ (NSArray *)array 
{ 
    if (!array) 
    array = [[NSArray alloc] init]; 

    return array; 
} 

@end 

O para el código desordenado, pero ligeramente mejor rendimiento (una buena idea en un bucle estrecho, pero por lo general no vale la pena):

@implementation A 

static NSArray *array; 

+ (void)initialize // this method is called *once* for every class, before it is used for the first time (not necessarily when the app is first launched) 
{ 
    [super initialize]; 

    array = [[NSArray alloc] init]; 
} 

+ (NSArray *)array 
{ 
    return array; 
} 

@end 

para acceder a ella de la clase B que acaba de hacer: [A array]

+2

Si necesita una inicialización segura de subprocesos y aún desea hacerlo de forma perezosa, dispatch_once() es una buena forma de hacerlo. –

+0

Hmm Nunca pensé en eso. Buena idea. –

+0

vea mi código para dispatch_once() – vikingosegundo

5

Quiero proponer el uso de una categoría en NSArray. Cambié un poco tu requerimiento para usar un NSMutableArray como objeto compartido.

archivo de interfaz:

#import <Foundation/Foundation.h> 

@interface NSArray (StaticArray) 
+(NSMutableArray *)sharedInstance; 

@end 

archivo de implementación

#import "NSArray+StaticArray.h" 

@implementation NSArray (StaticArray) 

+(NSMutableArray *)sharedInstance{ 

    static dispatch_once_t pred; 
    static NSMutableArray *sharedArray = nil; 
    dispatch_once(&pred, ^{ sharedArray = [[NSMutableArray alloc] init]; }); 
    return sharedArray; 
} 
@end 

Ahora se puede utilizar como:

[[NSArray sharedInstance] addObject:@"aa"]; 
[[NSArray sharedInstance] addObject:@"bb"]; 
[[NSArray sharedInstance] addObject:@"cc"]; 

y en otro lugar:

NSLog(@"%@", [NSArray sharedInstance]); 
Cuestiones relacionadas