2011-12-08 16 views
9

私はC#で静的配列

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

をpublic staticな配列を作成するには、次のコードを使用して、私はクラスのBIコール A.ArrayNameから別のクラスB を持っていると私は私が授業で使う配列を取得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]); 
関連する問題