Obj-C, как мне использовать NSUserDefaults для простого и эффективного доступа к настройкам через мое приложение / представления? - PullRequest
0 голосов
/ 19 декабря 2011

Я использовал переменные интерфейса делегата приложения во всем приложении, чтобы быстро получать доступ к битам данных всего приложения.

Я считаю, что это вызывает проблемы с эффективностью в моем приложении.И я наконец решил перейти к NSUserDefaults.Если вы не предложите какой-либо другой способ?

Часто я захочу получить доступ к одной и той же переменной через представление, поэтому нет смысла обращаться к этой переменной каждый раз с помощью NSUserDefaults.Я полагаю, что это будет медленно.

Так что я думаю о классе, который будет считывать все значения в какой-то массив в viewDidLoad, а затем, если значение будет изменено, сохранить / синхронизировать и обновить класспеременная.

Но если я перейду к представлению, я думаю, мне тоже придется сохранить.

Это начинает звучать немного грязно.

Однако мне просто интересно, какой подход будет эффективным и простым в использовании?

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Общий объект Model (с использованием парадигмы MVC) - это обычный рекомендуемый способ обмена переменными с несколькими другими объектами или классами. Этот объект Model может быть одноэлементным, или другие объекты могут локально копировать или делегировать ссылку на один объект Model для быстрого доступа к его получателям / установщикам.

Самый быстрый метод доступа к переменным часто просто использует глобальные переменные C (поскольку обычный C - это подмножество Objective C), если вы готовы решать потенциально более сложные проблемы повторного использования кода и отладки.

NSUserDefaults просто использует файловую систему в качестве глобальной переменной словаря значения ключа. Медленно, и со многими из тех же структурных проблем, что и использование глобальной переменной C.

0 голосов
/ 19 декабря 2011

Это действительно зависит от размера данных, к которым вы обращаетесь.Сериализации нескольких объектов NSDictionary на диск может быть достаточно, чтобы ваше приложение зависало.

Если вы серьезно относитесь к разработке под iOS, вам следует научиться использовать Core Data.Все, что может сделать NSUserDefaults, Core Data делает лучше.Единственное преимущество, которое обеспечивает NSUserDefaults - сокращает количество строк кода в крошечных одноразовых приложениях.Подумайте о базовых данных, как о закладке фундамента для дома, а о NSUserDefaults, как об установке палатки.

0 голосов
/ 19 декабря 2011

Если вам нужно использовать переменные, такие как массивы или наборы, лучше не использовать NSUserDefaults, поскольку при синхронизации они сохраняют все сохраненные значения на диск (конечно, если вам не нужно сохранять их на диск).Если вам нужно хранить большие объемы данных в графах объектов с такими отношениями, как это

User
 -name
 -lastname
 -email
 -messages
Message
 -date
 -text

Тогда вам лучше начать изучать инфраструктуру CoreData, она очень проста в использовании и позволяет хранить большие наборы данных на диске.и получить к ним быстрый доступ.

Если вам просто нужен какой-то класс, который, например, будет хранить текущие значения профиля пользователя, такие как имя пользователя, адрес электронной почты и т. д. Попробуйте создать одноэлементный класс - который почти не отличается от использования AppDelegate, ноэто намного понятнее, когда вы разделяете свои данные на более мелкие куски.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...