2016-11-16 15 views
1

я с помощью этого NSDate Extension в течение времени, но теперь это просто начать сбой при вызове [NSDate currentCalendar] dateAtStartOfDay метода из multimple нитей и некоторое tiem я получаю аварию с EXC_BAD_ACCESS и памятью адрес.EXC_BAD_ACCESS доступ к статическому члену в категории

Проблема в том, что когда я получаю то, что static NSCalendar *sharedCalendar из нескольких потоков одновременно, я получаю эту ошибку.

Общий доступ:

+ (NSCalendar *) currentCalendar 
{ 
    static NSCalendar *sharedCalendar = nil; 
    if (!sharedCalendar) 
     sharedCalendar = [NSCalendar autoupdatingCurrentCalendar]; 
    return sharedCalendar; 
} 

Как я могу это исправить?

здесь ошибка:

enter image description here и при печати объектов: (иногда [NSDate currentCalendar] возвращает адрес)

enter image description here

+0

'NSCalendar' не является потокобезопасным. Вам нужно будет добавить код, чтобы обеспечить одновременный доступ к общему календарю. – rmaddy

+0

@rmaddy вот почему метод хранит календарь в статической переменной, пожалуйста, просмотрите обновленный вопрос. –

+0

Это не меняет того факта, что вы вызываете методы на этом общем статическом экземпляре 'NSCalendar' одновременно на нескольких потоках. 'NSCalendar' не поддерживает это. – rmaddy

ответ

1

Ok, то решение, которое применяется сейчас это:

+ (NSCalendar *)currentCalendar 
{ 
    dispatch_once(&onceToken, ^{ 
     sharedCalendar = [NSCalendar autoupdatingCurrentCalendar]; 
    }); 

    return sharedCalendar; 
} 

Я просто завершаю инициализацию sharedCalendar в dispatch_once. Почти полгода не проблема.

 Смежные вопросы

  • Нет связанных вопросов^_^