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;
}

使用静态访问方法 [MyClass mySingletonArray] 从数组中获取您需要的内容,例如

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

我不认为你想用#define这个。

在您的示例中,没有使用此代码生成的常量字符串数组。在您的代码中使用的每一次rows,都会分配一个新的 NSArray。此外,KEY_ROWA指的是列,但这不在行定义中。我假设你有这样的东西

NSArray *columnas = rows;

这和真的没有区别

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

但第二行要明显得多。情况也是如此KEY_ROWA—— objectAtIndex 调用会更明显,而宏不会给你任何东西。

我不确定你到底需要什么,但是如果你需要一个类中的字符串共享常量数组,你可以将它声明为+而不是-在开头,然后分配一次(这是一个类变量而不是实例变量)。更多信息在这里:

如何在 Objective-C 中声明类级别的属性?

于 2012-05-09T14:37:36.290 回答