2011-12-08 32 views
9

静态数组我用下面的代码来创建在C#中的公共静态数组目标C

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

我有另一个类B. 从类BI呼叫 A.ArrayName,我得到我在课堂上使用数组A.

我想知道,什么是这个目标C

回答

18

没有特殊的语法此相当。你只需定义一个类方法来返回静态数组。

例如:

@implementation A // note this is in the implementation 

static NSArray *array; 

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

    return array; 
} 

@end 

或为混乱的代码,但表现略好(在一个紧密的循环是个好主意,但通常不值得):

@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 

从类访问B你只是这样做:[A array]

+2

如果您需要线程安全初始化并仍想懒惰地执行,dispatch_once()是一个好方法。 –

+0

嗯,我从来没有想到这一点。好主意。 –

+0

请参阅我的代码dispatch_once() – vikingosegundo

5

我想建议在NSArray上使用一个类别。我改变了你的需求,使用NSMutableArray作为共享对象。

接口文件:

#import <Foundation/Foundation.h> 

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

@end 

实现文件

#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 

现在你可以使用它作为:

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

和别的地方:

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