3

定数内の文字列の配列が必要です。#defineを使用するのは良い考えですか?

例えば:

#define rows [NSArray arrayWithObjects:  @"NameRowA",@"NameRowB",@"NameRowC", nil]


#define KEY_ROWA [columnas objectAtIndex:0]
#define KEY_ROWB [columnas objectAtIndex:1]
#define KEY_ROWC [columnas objectAtIndex:2]

文字列の配列とその配列の要素にアクセスする必要があります。

私は読んだことがありますが(本当かどうかはわかりません)、この方法で使用すると新しいNSArrayが作成され、配列が解放されると思います。メモリのその部分のみを使用するため、これは良いことだと思います。必要なときに。

4

2 に答える 2

7

シングルトンを使用してください。数行のコードです。必要なのは、静的シングルトンと、それを取得する(および一度設定する)ための静的メソッドだけです。

.mファイルには次のものが含まれている必要があります。

@implementation MyClass 

static NSArray *mySingletonArray; // this will be your array

+ (NSArray *)mySingletonArray // this is the static method for accessing your array
{
    if (nil == mySingletonArray) {
        mySingletonArray = [NSArray arrayWithObjects:@"firstString", @"secondString", nil];
    }

    return mySingletonArray;
}

静的アクセスメソッド[MyClassmySingletonArray]を使用して、配列から必要なものを取得します。例:

NSLog("%@", [[MyClass mySingletonArray] objectAtIndex:0]);
于 2012-08-04T22:59:36.787 に答える
6

これには使いたくないと思います#define

あなたの例では、このコードで作成された文字列の定数配列はありません。コードで使用されるたびrowsに、新しいNSArrayが割り当てられます。また、KEY_ROWAcolumnasを参照しますが、それは行定義にはありません。私はあなたがこのようなものを持っていると思います

NSArray *columnas = rows;

それと実際には違いはありません

NSArray *columnas = [NSArray arrayWithObjects: @"NameRowA",@"NameRowB",@"NameRowC", nil];

しかし、2行目はもっと明白です。同じことが当てはまりますKEY_ROWA-objectAtIndex呼び出しはより明白になり、マクロは何も取得しません。

正確に何が必要かはわかりませんが、1つのクラス内で文字列の共有定数配列が必要な場合は、最初では+なくとして宣言し-、一度割り当てることができます(これは、インスタンス変数)。詳細はこちら:

Objective-Cでクラスレベルのプロパティを宣言するにはどうすればよいですか?

于 2012-05-09T14:37:36.290 に答える