У меня есть игра, и я постоянно сохраняю прогресс пользователя. Это чрезвычайно быстро развивающаяся игра, и в некоторые моменты игры огромная прогрессия пользователя может случиться 6 раз в секунду, что требует от меня хранения нескольких переменных прогрессии в NSUserDefaults и синхронизации 6 раз в секунду. Это отлично работает на моем iPhone6s 64gb, но я боюсь, что это не может быть iPhone 4 16gb.Проблемы с NSUserDefaults
У меня нет возможности проверить его, потому что симулятор не очень точен с такими вещами, и у меня нет более медленного устройства. Я также не могу найти много подробностей о отчетах о предварительной работе NSUserDefaults в документации. Кто-нибудь имеет какие-либо знания по этой теме?
Я рассматриваю возможность хранения переменных в локальном NSDictionary. Я определяю в своем .h, а затем просто сохраняю и синхронизирую NSUserDefaults один раз во время appWillResignActive, но я беспокоюсь о потере данных в случае сбоя, и т. д. Я полагаю, что у меня мог бы быть NSTimer и сохранять данные каждые 5 секунд или около того, а также сэкономить на appWillResignActive, чтобы минимизировать потерю в случае сбоя; Я бы предпочел не переписывать большие объемы моего кода, хотя над чем-то, что NSUserDefaults может обрабатывать только штрафом на более мелких устройствах.
Обратите внимание, что вызов «synchronize» не имеет ничего общего с записью данных на диск. Это просто синхронизация с другим приложением, которое читает и записывает один и тот же магазин по умолчанию (это невероятно редко, а для приложений, отличных от Apple, практически невозможно использовать на iOS). 'synchronize' скоро (окончательно) будет устаревшим, потому что он не делает ничего похожего на то, что думают люди. См. Запись о правильном использовании NSUserDefaults у своего сопровождающего: http://dscoder.com/defaults.html –
Спасибо @RobNapier Я не знал об этом! –
В то время как я согласен с ответами, вы слишком часто набираете «synchronize», я хочу отметить, что ваша «озабоченность», вероятно, необоснованна ... Сколько у ваших пользователей на самом деле все еще есть iPhone 4? [Эта ссылка] (https://mixpanel.com/trends/#report/iphone_models/from_date:-20,to_date:0) предполагает, что доля рынка составляет всего около 1%. Я бы посоветовал не тратить большую часть своего времени на оптимизацию для 1% –