NSUserDefaults довольно прост в использовании и сохраняет одно значение только для ключа. Но, по-видимому, это не очень безопасный метод, поскольку шифрования нет.
Но Keychain безопасен, хотя его немного сложно закодировать. Вы можете ссылаться на эту ссылку, чтобы использовать доступ к keychain.
http://log.scifihifi.com/post/55837387/simple-iphone-keychain-code
вы также можете использовать эту библиотеку, разработанную Саймоном
https://github.com/goosoftware/GSKeychain
Надеюсь, это поможет вам!
Он компилируется в C ++, потому что C ++ должен поддерживать динамическую инициализацию в любом случае, или вы не можете иметь локальные статические или нелокальные объекты с нетривиальными конструкторами.
Так как C ++ имеет такую сложность в любом случае, поддержка этой инициализации, как вы показываете, не сложнее добавить.
В C это было бы большой проблемой, потому что у C нет других причин поддерживать инициализацию при запуске программы (кроме тривиальной инициализации нуля ). В C исходные значения области видимости файла или локальных статических объектов всегда можно статически помещать в исполняемый образ.
Статические переменные в C необходимо инициализировать со значением, известным во время компиляции. Это требование было удалено на C ++, и вы можете инициализировать их выражениями, оцененными во время выполнения.
Эти два языка различаются и многие, многие другие. Вы можете легко написать код C, который будет приемлемым для компилятора C ++, но обратное неверно.
6.7.8 / 4 [C99]
Все выражения в инициализаторе для объекта с длительностью статического хранения должны быть постоянными выражениями или строковыми литералами.
blockquote >В
static int i = initializer();
RHS не является постоянным выражением, поэтому код не компилируется в C.В C ++ такого ограничения нет и код корректно сформирован в C ++.
Difference between initialization of static variables in C and C++
, поэтому ответ, который показывает, что по-другому кажется особенно актуальным ...
– Chris Dodd
7 May 2011 в 19:03