NSArray不需要的重新分配

时间:2012-12-01 20:33:12

标签: objective-c macos

我是收藏编程的新手,所以我遇到了这个问题。任何帮助将被感谢...

我在类初始化中初始化了一个NSArray实例(我已经将它定义为头文件中该类的属性,因此我必须可以在该类实现的任何位置访问它)并为其分配一些对象 +(NSArray*) arrayWithObjects: ;。 init方法中的每一件事都很好,但是......

当我想在更新方法app崩溃时使用该数组时,因为该数组 DEALLOCATED

为什么该阵列被解除分配?我该如何预防?

谢谢。

3 个答案:

答案 0 :(得分:2)

如果你没有使用ARC,那么你应该用initWithObjects初始化它,然后保留它 如果你正在使用ARC,可能它只是一个弱引用。当你声明属性时,它是一个强大的参考。

答案 1 :(得分:1)

您应该alloc NSArray并改为使用-initWithObjects方法。

NSArray* tempArray = [[NSArray alloc] initWithObjects:(id), ..., nil]

答案 2 :(得分:1)

如果你正在初始化这样的数组,

objects = [NSArray arrayWithObjects: buttonOne, buttonTwo, 
                                     textField, nil];

它是一种常规方法,它只是在对象访问一次后自动释放对象。相反,您可以retain该对象,或者您可以像

那样分配和初始化它
objects = [NSArray alloc] initWithObjects: buttonOne, buttonTwo, 
                                     textField, nil];