2

NSMutableArray グローバルが必要です。私は次の設定をしています:

code.h
extern NSMutableArray *global
@interface
@end

code.m
NSMutableArray *global=nil;
@implementation
...
global=variable_mutablearray; //copy variable_mutablearray to global
@end

既存の nsmutablearray をグローバル変数に設定することは正しくないと確信しています。私は何をすべきですか?

4

2 に答える 2

3

グローバルはObjectiveCで使用するのに最適なものではありません。シングルトンを使用する方がはるかに優れています。

あなたはこのようにそれを行うことができます:

ヘッダ:

@interface Globals : NSObject
+(NSMutableArray*)array;
@end

実装:

@implementation Globals
+(NSMutableArray*)array {
    static NSMutableArray *statArray;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        statArray = [NSMutableArray array];
    });
    return statArray;
}
@end

使用法:

NSMutableArray *ga = [Globals array];
于 2012-07-30T03:05:47.830 に答える
0

「global = variable_mutablearray;」という行を想定する必要があります。ある時点で呼び出すメソッド内の代入です。

これは機能しますが、このオブジェクトの「所有権」はよくても疑わしいことに留意する必要があります。つまり、割り当てまたは再割り当てされるたびに、割り当て担当者はおそらくグローバルをクラスのivarであるかのように扱う必要があります(つまり、担当者オブジェクトを保持し、グローバルを解放してから、担当者をグローバルに割り当てます)。自動解放されたオブジェクトで割り当てのようなことをしないようにする必要があります。

他の方法でデータをカプセル化するシングルトンが望ましいことに同意します。しかし、最終的には Objective-C は C であるため、グローバル/共有メモリ パラダイムを継承します。

于 2012-07-30T03:10:54.627 に答える