EXC_BAD_ACCESS类别访问静态成员
问题描述:
我已经使用这个NSDate Extension了一段时间,但现在它只是开始,同时呼吁崩溃[NSDate的currentCalendar]从multimple线程dateAtStartOfDay
方法和一些TIEM我收到了崩溃与EXC_BAD_ACCESS和存储地址。EXC_BAD_ACCESS类别访问静态成员
问题是,当我在同一时间从多个线程访问该static NSCalendar *sharedCalendar
时,我得到该错误。
共享访问:
+ (NSCalendar *) currentCalendar
{
static NSCalendar *sharedCalendar = nil;
if (!sharedCalendar)
sharedCalendar = [NSCalendar autoupdatingCurrentCalendar];
return sharedCalendar;
}
我怎样才能解决这个问题?
这里是错误:
答
行,就是现在所施加的溶液是:
+ (NSCalendar *)currentCalendar
{
dispatch_once(&onceToken, ^{
sharedCalendar = [NSCalendar autoupdatingCurrentCalendar];
});
return sharedCalendar;
}
我刚刚包装了的初始化3210在dispatch_once
。近半年没有问题。
'NSCalendar'不是线程安全的。您将不得不添加代码以确保没有对共享日历的并发访问。 – rmaddy
@rmaddy这就是为什么该方法将日历存储到静态变量中,请参阅更新后的问题。 –
这并不改变你在多线程上同时在这个共享的静态'NSCalendar'实例上调用方法的事实。 'NSCalendar'不支持。 – rmaddy