私はC#で静的配列
public class A{
public static array[] obj;
}
をpublic staticな配列を作成するには、次のコードを使用して、私はクラスのBIコール A.ArrayName
から別のクラスB を持っていると私は私が授業で使う配列を取得A.
私が知りたかった、これと同等のは客観Cで何
私はC#で静的配列
public class A{
public static array[] obj;
}
をpublic staticな配列を作成するには、次のコードを使用して、私はクラスのBIコール A.ArrayName
から別のクラスB を持っていると私は私が授業で使う配列を取得A.
私が知りたかった、これと同等のは客観Cで何
このための特別な構文はありません。静的配列を返すクラスメソッドを定義するだけです。例えば
:
@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]
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]);
スレッドセーフな初期化が必要な場合でも、遅れを遅らせる必要がある場合は、dispatch_once()を使用するとよいでしょう。 –
うーん、私はそれを考えなかった。良いアイデア。 –
dispatch_once()のコードを見る – vikingosegundo