Мой вопрос, вкратце: Есть ли способ сделать потокобезопасную сборку KVO-сборщиков потокобезопасной с той же блокировкой, что методы @synthesized заблокированы?Ключевое значение кодирования для изменяемых коллекций и атомных аксессуаров
Объяснение: У меня есть класс контроллера, который содержит коллекцию (NSMutableArray) объектов Post
. Эти объекты загружаются с веб-сайта, поэтому коллекция время от времени меняется. Я хотел бы иметь возможность использовать наблюдение за ключом для наблюдения за массивом, чтобы обновить интерфейс.
Мой контроллер имеет posts
свойство, объявленный следующим образом:
@property (retain) NSMutableArray *posts;
Если я позвоню @synthesize в моем файле .m, он будет создавать -(NSMutableArray *)posts
и -(void)setPosts:(NSMutableArray *)obj
методы для меня. Кроме того, они будут защищены блокировкой, так что два потока не могут топать друг на друга при настройке (или получении) значения.
Однако, чтобы быть совместимым с ключевыми значениями для изменяемой упорядоченной коллекции, существует несколько других методов, которые мне нужно реализовать. В частности, мне нужно реализовать at least the following:
-insertObject:inPostsAtIndex:
-removeObjectFromPostsAtIndex:
Однако, поскольку сообщения загружаются асинхронно, я хотел бы иметь возможность добавлять новые сообщения в массив на фоне потока, а также. Это означает, что доступ должен быть потокобезопасным.
Итак, мой вопрос. Есть ли способ сделать эти средства доступа потокобезопасными с той же блокировкой, что методы @synthesized заблокированы? Или мне нужно прибегнуть к определению методов setPosts:
и posts
, чтобы гарантировать полную атомарность всех аксессуаров?