2011-12-08 14 views
9

używam poniższy kod, żeby stworzyć publiczną statyczną tablicę w C#statyczna tablica w celu C

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

mam innej klasy B. z klasy BI rozmowy A.ArrayName i mam tablicę używać w klasie A.

chciałem wiedzieć, co jest równoznaczne z tym, w celu C

Odpowiedz

18

nie ma specjalnej składni dla tego produktu. Po prostu definiujesz metodę klasy, aby zwrócić statyczną tablicę.

Na przykład:

@implementation A // note this is in the implementation 

static NSArray *array; 

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

    return array; 
} 

@end 

Albo kodu Messier, ale nieznacznie lepszą wydajność (dobrym pomysłem w pętli napięty, ale zazwyczaj nie warto):

@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 

do niego dostęp z klasą B Po prostu wykonaj: [A array]

+2

Jeśli potrzebujesz inicjacji bezpiecznej dla wątków i nadal chcesz to robić leniwie, to dispatch_once() jest dobrym rozwiązaniem. –

+0

Hmm, nigdy o tym nie myślałem. Dobry pomysł. –

+0

zobacz mój kod dla dispatch_once() – vikingosegundo

5

Chcę zaproponować za pomocą kategorii na NSArray. Zmieniłem trochę twoje wymaganie, aby użyć obiektu NSMutableArray jako obiektu współużytkowanego.

plik interfejs:

#import <Foundation/Foundation.h> 

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

@end 

plik realizacja

#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 

Teraz można go używać jako:

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

i gdzie indziej:

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