【发布时间】:2012-05-07 02:01:34
【问题描述】:
我有一个属性
@property (nonatomic, strong) NSMutableArray *timesArray;
它用于填充我的 UITableView 中的数据。当我想清除视图时,我会这样做:
- (void)clearView {
self.nameField.text = @"";
self.noteField.text = @"";
if ([_timesArray count] > 0) {
[self.timesArray removeAllObjects];
[self.customTableView reloadData];
}
}
removeAllObjects 会导致崩溃。我不确定为什么。我环顾四周,很多帖子都在谈论一个对象被过度释放。如果我使用 ARC 而不是在任何对象上调用保留/释放,那会发生什么情况。我的 _timesArray 只包含我从 UIDatePicker 获得的 NSDate 对象。
我的堆栈跟踪如下所示:
我的 insertPill 看起来像:
- (void)insertPill:(id)sender {
//[[NSNotificationCenter defaultCenter] postNotificationName:InsertPillNotification object:self];
[self clearView];
}
如果我不删除所有对象,就这样做:
NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithCapacity:0];
self.timesArray = emptyArray;
这行得通。但我仍然想知道为什么通过删除它不起作用的对象。
编辑:我在 viewDidLoad 中初始化数组:
_timesArray = [[NSMutableArray alloc] initWithCapacity:0];
当我想向数组中添加一个新对象时,我会这样做:
NSMutableArray *tempUnsortedArray = [[NSMutableArray alloc] initWithArray:_timesArray];
[tempUnsortedArray addObject:_datePicker.date];
self.timesArray = tempUnsortedArray;
我不确定我向数组添加数据的方式是否会导致问题。
【问题讨论】:
-
你是否覆盖了 timesArray 的设置器?
-
如果你不调用getter,只做[_timesArray removeAllObjects]会发生什么?
-
@mprivat 不,我不会覆盖 timesArray 的设置器。
-
@Joel 如果我执行 [_timesArray removeAllObjects],我会得到同样的结果。
-
可能你是从一个 NSArray 开始的。不只是传递和保留它,而是制作一个 mutableCopy
标签: iphone nsmutablearray