У меня есть NSMutaleArray
, который содержит экземпляры класса X. Ячейка tableView в строке i
заполняется с использованием содержимого массива с индексом i
.NSMutableArray с данными источника таблицы, измененными в нескольких потоках, как избежать блокировки при настройке ячейки
Содержимое массива создается на основе входящих данных JSON из сети. Итак, у меня есть вспомогательная функция, которая преобразует данные JSON в эти объекты и сохраняет их в массиве. Объект может быть изменен после сохранения в массиве (например, изображение, принадлежащее ячейке, загружается, а указатель файла добавляется к объекту).
В настоящее время я делаю чтение и запись потоков, безопасно помещая их в dispatch_sync & dispatch_barrier_async. Некоторые вопросы, которые я вижу
Чтобы создать ячейку таблицы, мне нужно сделать чтение. Это также происходит через dispatch_sync. Следовательно, похоже, что есть вероятность, что он будет заблокирован, потому что данные для невидимой, но достаточно близкой ячейки обновляются. Любые лучшие методы, чтобы избежать этого?
Есть ли какой-то умный способ для блока, отправленного через dispatch_sync и disaptch_barrier_sync, только ждать, будет ли другой блок изменяться, удаление одного и того же индекса NSMUtableArray или связанного с ним значения являются ключом NSMUtableDictionary?
Чтобы сделать код более читаемым, я подумываю о подклассификации NSMutableArray и создании класса THreadSafeMutableArray, который превосходит методы objectForIndex и subscript. Любые проблемы с этим подходом?