需要在NSArray中收集对象但是

时间:2010-12-13 06:48:08

标签: objective-c

非常Noob问题:

我在控制器实例中有一些事件处理方法(使用Interface Builder创建);我需要收集各个事件方法需要访问的数组中的对象。数组var应该在controller.m文件中吗?如果那是它的地方,我可以写一个init方法吗?

这是一个大纲:

@implementation myController

NSArray *myVar = [NSArray array];   (Compiler doesn't like it)

- buttonClick
{
}

- menuSelection
{
}

@end

2 个答案:

答案 0 :(得分:0)

如果您希望能够将对象添加到阵列,则需要将其设为NSMutableArray。如上所述,全局变量的初始化可以在+(void)初始化方法中完成。

但是,一般来说,应避免使用这些变量。最好将数组存储在控制器中,并在控制器的init方法中初始化它。

答案 1 :(得分:0)

编译器不喜欢这样,因为您无法在C初始化程序中调用函数。

假设这是UIViewController的子类,如果你想为每个控制器建一个数组,你应该把它作为一个实例变量并在-viewDidLoad初始化它,或者你可以在-initWithNibName:bundle:中做到这一点。 。该数组应分别在-viewDidUnload-dealloc中发布。

如果您的数组应该是唯一的并且在所有控制器之间共享,那么最简单的方法是创建一个类方法:

+(NSArray*) myVar
{
    static NSArray* theArray = nil;
    if (theArray == nil)
    {
        theArray = [[NSArray alloc] init];  // Do not use [NSArray array] because you need to own the returned object
                                            // until the program dies
    }
    return theArray;
}

注意我已经随处使用NSArray,但您更有可能需要NSMutableArray