0

在我的应用程序中,我有一个方法,当我按下按钮时,将一个字符串添加到一个 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;
}
4

1 回答 1

3

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

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

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

您也可以打开 ARC,它会为您解决这个问题,而且无论如何都是个好主意。

于 2012-09-16T20:07:01.793 回答