在我的标题中,我有两个属性,如下所示。
@interface HZCalendarDataSource : NSObject
@property (strong, nonatomic) NSMutableArray *datesOnCalendar;
@property (strong, nonatomic) HZCalendarDay *currentDay;
@end
然后在我的实现的初始化程序中,我有以下代码行。
- (id)init {
self = [super init];
if (self) {
// Alloc / Init instance variables.
self.datesOnCalendar = [[NSMutableArray alloc] init];
self.currentDay = [[HZCalendarDay alloc] init];
HZCalendarDay *date = [[HZCalendarDay alloc] initOnDate:today withEventStore:self.eventStore];
[self.datesOnCalendar addObject:date];
// THIS line causes the app to freeze!
// If this line is above [self.datesOnCalendar addObject:date];
// Then it does not freeze. Why does this happen?
self.currentDay = date;
}
return self;
}
我遇到的问题是,如评论中所示,该self.currentDay = date;
行冻结了设备上的应用程序。但是,如果我将行移到self.currentDay = date;
添加日期对象的行上方NSMutableArray
,那么代码就可以正常工作。
所以我的问题是,为什么这个顺序很重要?它应该只是设置为引用我添加到正确self.currentDay
的相同对象吗?date
NSMutableArray
如果有人可以向我解释这一点,我将不胜感激,我不明白。顺序并不重要,所以现在我已经在将日期对象添加到数组之前移动了要执行的麻烦行,但是出于教育目的,我想知道为什么这是第一个问题地方。
编辑:
在让应用程序冻结一段时间后,它在调用 [HZCalendarDateSource setCurrentDay:] 25,827 次后最终在 Xcode 中失败。它在调试器中出现 EXC_BAD_ACCESSS 失败,并且 -[__NSArrayM countByEnumeratingWithState:objects:count:];
希望这可以帮助。
谢谢!