将对象添加到NSMutableArray只是第一次工作

时间:2012-09-16 19:42:04

标签: iphone objective-c ios

在我的应用程序中,我有一个方法,当我按下按钮时,将一个字符串添加到NSMutableArray,这是UITableView的模型。

 - (void)addPressed:(id)sender
{
    NSString *string = @"aString";
    [self.array addObject:string];
    NSLog(@"Array count: %d",[self.array count]);
    [self.tableView reloadData];
}

问题是只有当我按下连接到此动作的按钮两次时,才会第一次添加,我得到了这个输出:

2012-09-16 21:33:08.766 iUni[3066:c07] Array count: 1 //Which is fine since it worked
2012-09-16 21:33:08.952 iUni[3066:c07] Array count: 1 //Now count should be 2!!

任何人都猜测为什么会这样?

我添加了@property,合成它并以这种方式懒惰地实现它:

- (NSMutableArray *)array
{
    if (!_array) {
        NSMutableArray *array = [NSMutableArray array];
        _array = array;
    }
    return _array;
}

1 个答案:

答案 0 :(得分:3)

您的数组被创建为无主(实际上是自动释放的)对象,这意味着每次调用访问器后它都会被销毁。然后在您下次访问它时重新创建它,这会为您提供一个新的空数组。

您需要创建一个自有版本的数组以存储到您的实例变量中:

if (!_array) {
    _array = [[NSMutableArray alloc] init];
    // Note no need to create a temp variable.
}
return _array;

你也可以开启ARC,它可以为你照顾这个,无论如何都是个好主意。