我需要一个常量中的字符串数组。使用#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,当它被使用时,我想这个数组被释放了,所以我认为这很好,因为你只使用它你需要它时的一部分记忆。
答案 0 :(得分: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]);
答案 1 :(得分:6)
我认为您不想使用#define
。
在您的示例中,没有使用此代码生成的常量字符串数组。每次在代码中使用rows
时,都会分配一个新的NSArray。此外,KEY_ROWA
引用了columnas,但这不在行的define中。我假设你有这样的东西
NSArray *columnas = rows;
它和
之间确实没有区别NSArray *columnas = [NSArray arrayWithObjects: @"NameRowA",@"NameRowB",@"NameRowC", nil];
但第二行更为明显。 KEY_ROWA
也是如此 - objectAtIndex调用会更明显,宏不会给你任何东西。
我不确定你需要什么,但是如果你需要一个类中的共享常量字符串数组,你可以在开头将它声明为+
而不是-
,并且分配一次(这是一个类变量而不是实例变量)。更多信息: