为什么我不能在选项卡式应用程序中使用初始化数组?

时间:2012-01-05 07:07:02

标签: ios cocoa-touch nsarray exc-bad-access

在Xcode 4.2中开发的选项卡式应用程序中,我发现了一个令人困惑的问题:在其中一个选项卡中,有一个tableview来显示类似索引的内容。所以我在viewDidLoad()方法中初始化了一个数组。例如:

- (void)viewDidLoad
{
    NSArray *array = [NSArray arrayWithObjects:@"abc", @"def", @"ghi", @"jkl", @"mno",      nil];    
    self.arrayList = array;
    [array release];

    [super viewDidLoad];
}

然后我在其他方法中使用这个arrayList:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [arrayList count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = [arrayList objectAtIndex:indexPath.row];
    return cell;
}

但每次运行时Xcode都会给我“EXC_BAD_ACCESS”信号。我放了一些断点,发现数组是在viewDidLoad()中成功创建的,但在运行方法cellForRowAtIndexPath:(NSIndexPath *)indexPath之前,它变成了一个释放的对象。这就是我得到那个信号并且应用程序崩溃的原因。那么,如何解决这个问题?

顺便说一句,发生问题的视图控制器是从UIViewController而不是UITableViewController创建的。但我放了一个表视图并将其数据源和委托链接到File的所有者。那有关系吗?

1 个答案:

答案 0 :(得分:1)

你不能release阵列。 +arrayWithObjects:便捷方法返回一个无主数组。你永远不会拥有阵列的所有权,因此你不能放弃所有权。删除行[array release],您将不会再看到此错误(至少不是因为这个原因)。