Проблема многопоточного доступа к данным, синхронная синхронизация и последовательная очередь

Как вы, возможно, поняли, доступ к непотоковым безопасным переменным является большой головной болью. За iOS Одним из простых решений является использование ключевого слова @synchronized, который добавит NSLock чтобы обеспечить доступ к данным одним потоком, недостатком является следующий:

  1. Слишком большая блокировка значительно снизит производительность приложения, особенно при вызове основным потоком.

  2. Мертвая блокировка произойдет, когда логика станет сложной.

Исходя из вышеизложенных соображений, мы предпочитаем использовать последовательную очередь для обработки, каждая критическая операция с безопасным потоком добавляется в конец очереди, это отличное решение, но проблема в том, что все интерфейсы доступа должны быть разработаны в асинхронном стиле, см. следующий.

-(id)objectForKey:(NSString *)key;

Люди, которые вызывают этот класс, не хотят разрабатывать таким образом. Любой, кто имеет опыт в этой области, пожалуйста, поделитесь и обсудите вместе.

1 ответ

Окончательное решение заключается в использовании NSUserDefault для хранения небольших данных, а для больших данных в кэш-памяти они помещаются в файл, который мы сами поддерживаем.

Для Apple doc преимущество NSUserDefault является поточно-ориентированным и будет периодически синхронизировать работу.

Другие вопросы по тегам