在类中保留NS(Mutable)数组时出错

时间:2009-08-25 09:18:25

标签: objective-c nsmutablearray nsarray retain

我在使用数组时遇到了困难。来自AS2 / AS3和垃圾收集对我来说是新的......;)

这不是完整的代码,只是重要的部分。

.h-file
@interface HelperViewController : UIViewController {
    NSMutableArray *pagesNumbers;
}
@property (nonatomic, retain) NSMutableArray *pagesNumbers;

.m-file
@synthesize pagesNumbers;
-(void)loadView {
    pagesNumbers = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], [NSNumber numberWithInt:1], nil];
    NSLog(@"pagesNumbers: %@", pagesNumbers); // WORKS!
}
-(void)changePage:(id)sender {
    NSLog(@"pagesNumbers: %@", pagesNumbers); // PROBLEM*
}

问题*是,它在viewDidLoad调用函数时有效,但在稍后用UIButton调用它时会发生崩溃(非常有用)msg:

[会议开始于2009-08-25 11:12:51 +0200。] GNU gdb 6.3.50-20050815(Apple版gdb-966)(2009年3月10日星期二02:43:13) 版权所有2004 Free Software Foundation,Inc。 GDB是免费软件,由GNU通用公共许可证涵盖,您就是 欢迎在某些条件下更改和/或分发它的副本。 输入“show copying”查看条件。 GDB完全没有保修。输入“show warranty”了解详情。 此GDB配置为“i386-apple-darwin”.sharedlibrary apply-load-rules all 附加到流程13197。

有人可以帮忙吗?

此致 埃里克。

1 个答案:

答案 0 :(得分:2)

看起来没有保留pagesNumbers。

尝试添加:

[pagesNumbers retain];
在loadview中初始化数组后

我相信arrayWithObjects将返回一个自动释放的数组,因此如果你想稍后使用它,你需要明确地保留它。

编辑,只是注意到pagesNumbers也是一个属性。您正在直接初始化pagesNumbers,因此不会调用合成的setter(并且不会自动保留)。如果你想使用属性设置器,我相信你需要使用self引用pagesNumbers,即

self.pagesNumbers = [NSMutableArray arrayWithObjects.....