Objective c 常量中带有#define-objective c的字符串数组

Objective c 常量中带有#define-objective c的字符串数组,objective-c,ios,Objective C,Ios,我需要一个常量中的字符串数组。使用#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

我需要一个常量中的字符串数组。使用#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,我想然后该数组会被释放,所以我认为这很好,因为您只在需要时使用该部分内存。

我认为您不想为此使用
#define

在您的示例中,没有使用此代码生成的字符串常量数组。每次在代码中使用
,都会分配一个新的NSArray。另外,
KEY_ROWA
引用了columnas,但它不在定义的行中。我想你有类似的东西

NSArray *columnas = rows;
这和我的想法没有什么区别

NSArray *columnas = [NSArray arrayWithObjects: @"NameRowA",@"NameRowB",@"NameRowC", nil];
但第二条线要明显得多。对于
KEY\u ROWA
,情况也是如此——objectAtIndex调用将更加明显,而宏不会得到任何结果

我不确定您到底需要什么,但是如果您需要一个类中的字符串共享常量数组,您可以在开始时将其声明为
+
,而不是
-
,并分配一次(这是一个类变量,而不是一个实例变量)。更多信息请点击此处:


使用单例,它只是几行代码。 您所需要的只是一个静态单例,以及一个用于检索它(并设置一次)的静态方法

.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;
}
使用静态访问方法[MyClass MySingleToArray]从阵列中获取所需内容,例如:

NSLog("%@", [[MyClass mySingletonArray] objectAtIndex:0]);

你能看一下你的代码片段吗。您没有在任何地方使用
以及
?不要以这种方式编程,任何继承您代码的人都可能试图找到您的地址以及与您最亲近的人的姓名和号码。“我认为这很好,因为你只在需要的时候使用那部分内存。”感谢你将kante0从如此糟糕的编码实践中拯救出来。首先感谢kante0的提问,一般来说,如果您编程的方式感觉有问题,那么很有可能是错误的。@Lou Franco非常感谢您的建议。我的意图是创建一个常量静态字符串数组,我是说一个没有人可以修改的字符串数组。但是我想知道我要做什么:NSLog(@“所有行”,行);NSLog(@“KEY_ROWA%@”,KEY_ROWA%);NSLog(@“KEY_ROWB%@”,KEY_ROWB%);NSLog(@“KEY_ROWC%@”,KEY_ROWC%);对于第一行,我有一个数组和所有值(NameRowA、NameRowB、NameRowC),其余的字符串和每个值。非常感谢,纠正是明智的人:)P.D.:在第一个代码块中,我的意思是“行”而不是“列”。您编写的每个NSLog都有一个完全不同的对象。它们都是等价的,但它们不是静态的<代码>行每次使用时都会创建一个新数组。