2015-09-30 1 views
-2

Мое приложение включает в себя одноэлементный класс, представляющий общие данные. Последний содержит следующую атомной недвижимости:iOS 9.0 - NSMutableDictionary, вызывающий EXC_BAD_ACCESS

// .h file 
@property (atomic, strong) NSMutableDictionary *dataDictionary; 

// .m file 
@synthesize dataDictionary; 

словаря который используется одновременно из разных потоков (как установок и получения), и работал в обычном режиме без каких-либо аварий на прошивке 6.0 - 8.4. Недавно я запустил приложение на симуляторе iOS 9.0 и он разбился (EXC_BAD_ACCESS) в произвольном коде, вызывающем словарь setObject:forKey:.

  1. Кто-нибудь знает, что изменилось в iOS 9.0, что может привести к этим сбоям?
  2. Любые подсказки, как решить эту проблему?

enter image description here

enter image description here

+0

Проверьте, что словарь может иметь значение null для ключа. –

+0

Вы имеете в виду значение null ИЛИ ключ имеет значение null? –

+0

@ Цахи Дери значение. – tounaobun

ответ

2

atomic на собственность не означает, что вы думаете, что он делает. atomic означает, что само значение свойства (то есть указатель) защищено от параллельного доступа, но оно вообще не защищает содержимое словаря.

Если ваш код работал с предыдущими версиями iOS, то это было полностью случайно. Ваш код будет разбиваться случайным образом, если вы разрешаете нескольким потокам получать доступ к одному NSMutableDictionary таким образом.

Вам нужно добавить какую-либо блокирующую дисциплину между этими несколькими потоками.

0

Я думаю, вы должны использовать неатомический, а не атомный

+0

Такое же поведение происходит с неатомическим. –