在我的应用程序中,我有一个方法,当我按下按钮时,将一个字符串添加到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;
}
答案 0 :(得分:3)
您的数组被创建为无主(实际上是自动释放的)对象,这意味着每次调用访问器后它都会被销毁。然后在您下次访问它时重新创建它,这会为您提供一个新的空数组。
您需要创建一个自有版本的数组以存储到您的实例变量中:
if (!_array) {
_array = [[NSMutableArray alloc] init];
// Note no need to create a temp variable.
}
return _array;
你也可以开启ARC,它可以为你照顾这个,无论如何都是个好主意。